scanf() [RESOLVIDO]

1. scanf() [RESOLVIDO]

Luiz Carlos de Moura
lcmoura

(usa Ubuntu)

Enviado em 04/09/2009 - 17:24h

Pessoal, não sei porque o programa abaixo não funciona quando incluo a instrução scanf("%d",&i) antes de scanf("%c",&c). Se retirar os comandos // o programa não funciona como esperado. Por quê?

#include <stdio.h>
int main()
{
int i;
char c;
char s[20];
//printf("Digite um valor inteiro: ");
//scanf("%d",&i);
printf("Digite uma letra: ");
scanf("%c",&c);
printf("Digite uma palavra: ");
scanf("%s",s);
printf("\nVoce digitou:\nInteiro %d\nCaracter %c\nPalavra %s\n",i,c,s);
return 0;
}

Sei que o scanf() é meio complicado para iniciantes como eu, mas usei-o para ler variáveis diferentes e por isso não entendo o resultado obtido.
Conto com sua costumeira atenção e expertise. Grato.


  


2. MELHOR RESPOSTA

Marcos Paulo Ferreira
Daemonio

(usa Slackware)

Enviado em 05/09/2009 - 18:59h

É o maldito enter que fica no buffer. Quando o usuário digita o número e aperta a tecla enter, o número vai para a variável 'i' o enter fica no buffer. Quando o segundo scanf() é executado, ele pega diretamente o que tiver no buffer e bota na variável 'c'.

Após cada scanf() é aconselhável limpar o buffer.
Use flush(stdin) para windows e __fpurge(stdin) para linux.
Eu gosto de usar um getchar() :)

printf("Digite um valor inteiro: ");
scanf("%d",&i);
getchar() ;
printf("Digite uma letra: ");,
scanf("%c",&c);

[]'s

3. Re: scanf() [RESOLVIDO]

Filippe
spolti

(usa Fedora)

Enviado em 04/09/2009 - 17:34h

Era para funcionar, mas acho que a biblioteca stdio não trabalha com números.. (posso ter viajado, me corrijam se estiver errado).

inclua a bibliteca iostream.h e conio.h




4. scanf()

Luiz Carlos de Moura
lcmoura

(usa Ubuntu)

Enviado em 04/09/2009 - 17:51h

Olha, com iostream.h obtenho o erro "no such file or directory "ENOENT)".
O header conio.h é aceito, mas o resultado é o mesmo, isto é, o programa não funciona se scanf() ler qualquer coisa antes de ler um caractere. Em outras palavras, mesmo se for solicitado para ler um caractere, na segunda solicitação ocorre um erro. Não parece ter algo a ver com o tipo da variável lida antes.
Esta parte inicial do estudo do C deveria ser fácil, supostamente, não? Imagino quando chegar a temas mais complexos! ;-)
Por favor, me ajudem! Grato.


5. scanf()

Luiz Carlos de Moura
lcmoura

(usa Ubuntu)

Enviado em 08/09/2009 - 15:35h

É isso mesmo!
Tanto com getchar(); como com scanf("%c",&c); deu tudo certo!
Vou encerrar o tópico e marcar sua dica como a melhor resposta.
Parabéns. E obrigado.
Aqui é o espaço ideal para autodidatas como eu tirarem as dúvidas.
Logo vão poder contar comigo também porque estou aprendendo muito com vocês.
Valeu,

Luiz


6. Ainda tem problemas

Perfil removido
removido

(usa Nenhuma)

Enviado em 05/11/2009 - 09:15h

Rodando seu exemplo se eu digitar no lugar da palavra:

teste1 teste2

e apertar o enter, o resultado do printf para a palavra é somente o teste1, misteriosamente ele "come" o resto da frase após encontrar o 1o espaço em branco.

Alguém sabe porque isso acontece e como corrigir?


7. Re: scanf() [RESOLVIDO]

Luiz Carlos de Moura
lcmoura

(usa Ubuntu)

Enviado em 05/11/2009 - 10:54h

Olha, scanf() com o especificador de formato %s lê caracteres da string até encontrar um caractere de espaço em branco. Se sua string tiver espaços em branco a função adequada a ser usada é gets(), que lê os caracteres até encontrar um retorno de carro (enter).






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts