Ir ao conteúdo

Posts recomendados

Postado

Bom dia.

 

Estou fazendo o seguinte exercicio: Ler uma frase e contar quantos caracteres sao espaços em brancos.

 

Desenvolvi a seguinte solução:

#include <stdio.h>
#include <string.h>
#include <conio.h>

int main()
{
    char palavra[20];
    int esp=32;
    int cont=0;
    int espaco=0;
    
    printf("Digite uma frase: ");
    scanf("%s",palavra);
    
    while(palavra[cont]!='\0'){
        if(palavra[cont]==esp){
            espaco++;
        }
        cont++;
    }
    printf("Numero de espaco e': %d",espaco);
    return 0;
}

porém não esta funcionando, contudo se trocar a linha do scanf por gets(palavra) funciona normalmente. o que acontece se os dois são para pegar strings.

Postado

leia este artigo:

https://www.it-swarm.dev/pt/c/qual-e-diferenca-entre-gets-e-scanf/1049206396/

 

use este método:

scanf("%30[^\n]%*c",palavra);

^ ^ ^ ^---------String a ser pega

| | |--------------Caractere de controle

| |-----------------Ignora NewLine

|----------------------Pega 29 caracteres

#include <stdio.h>
#include <string.h>
#include <conio.h>

int main()
{
    char palavra[20];
    int esp=32;
    int cont=0;
    int espaco=0;
    
    printf("Digite uma frase: ");
    scanf("%30[^\n]%*c",palavra);
    
    
    while(palavra[cont]!='\0'){
        if(palavra[cont]==esp){
            espaco++;
        }
        cont++;
    }
    printf("Numero de espaco e': %d",espaco);
    return 0;
}

 

Postado
5 horas atrás, Jessé P. de Melo disse:

porém não esta funcionando, contudo se trocar a linha do scanf por gets(palavra) funciona normalmente. o que acontece se os dois são para pegar strings

 

Sua definição é que está errada.  Dos dois lados.

 

  • gets() não foi escrita para "pegar strings" e sim para ler uma linha. Ela lê uma linha da entrada padrão, o que vier até o new_line ou até o fim de arquivo (control Z). Não lê uma string. gets() cria uma: ela lê até o \n ou fim de arquivo coloca num vetor e depois ACRESCENTA o \0 criando assim uma string.
     
  • scanf() por outro lado não foi escrita para "pegar strings" e o nome dela vem do propósito: scan formatted input. Esse é o objetivo. scanf() é uma rotina ativa, que consome a entrada baseada numa máscara, tipo printf() e essa máscara, a tal string de formato, controla totalmente o comportamento dela, que pode incluir ou ignorar espaços e ' \n' inclusive. 
2 horas atrás, vangodp disse:

Acredite se quiser, porém a linguagem esta escrita por pessoas mais inteligentes que nós, e simplesmente existem coisas que ignoramos, por isso devemos avançar no entendimento

 

Tem razão. Ken Thompson escreveu isso eu creio. Entre outras coisas como grep, ed, sed, a noção de pipes, streams e tal. Muitas dessas funções vieram do diretório da máquina dele na Bell Labs no final dos '60 quando ele escreveu boa parte do Unix. Entre outras milhares de coisas ele escreveu depois com outros Go, a linguagem, Unicode, UTF-8... No caso de scanf() o plano era scan formatted input

 

 

 

 

  • Obrigado 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!