Não percebo o que estou a fazer errado, independentemente de que função utilize o aplicativo recebe a primeira letra mas não a segunda, indica logo o resultado! Ex (c/ getchar - o resultado é o mesmo c/ todas): #include int main() { char letra1, letra2; printf("Digite uma letra "); letra1=getchar();
printf("Digite outra letra "); letra2=getchar();
printf("As letras digitadas foram %c e %c", letra1, letra2); }
E o resultado é (digitando m): Digite uma letra m Digite outra letra As letras digitadas foram m e
Process returned 31 (0x1F) execution time : 2.454 s Press any key to continue.
printf("Insira um caractere: "); scanf("%c", & letra1);
printf("Insira outro caractere: "); scanf("%c", & letra2);
printf("Você digitou: '%c' e '%c'", letra1, letra2); } \\-----------------------------
Comigo após eu digitar o primeiro valor a tela fechou e nao exibiu nehum resultado, tentei usar o dois comandos para tentar resolver o problema Getch (); e o Break (); mas não obtive resultado satisfatórios.
26 de agosto de 2014 às 16:00
Rafael Ferreira disse...
Galera boa tarde !
estava fazendo o mesmo código aqui e estava com o mesmo problema que vocês .... percebi que não precisava necessariamente de dois "PRINTSFS" . Segue abaixo o código : #include
int main() { char letra1, letra2;
printf("Insira duas letras: "); letra1 = getc(stdin); letra2 = getc(stdin);
printf("Voce digitou: '%c' e '%c'", letra1, letra2);
getch();
system("pause"); return 0;
}
no caso ai , você ja digita as duas letra seguidas , ao contrário do exemplo padrão.
22 de outubro de 2014 às 12:27
Anônimo disse...
use system("pause");
25 de outubro de 2014 às 10:06
Anônimo disse...
Uma forma de resolver o problema apresentado no artigo é o uso do fflush(stdin); esse comando limpa o buffer de entrada.
#include
int main() { char letra1, letra2;
printf("Insira um caractere: "); letra1 = getc(stdin); printf("Insira outro caractere: ");
fflush(stdin);
letra2 = getc(stdin); printf("Você digitou: '%c' e '%c'", letra1, letra2);
RenatoM O segundo pgm na forma descrita para mim não funciona a contento. Fiz alteração como abaixo
#include int main () { char letra1, letra2, letra3; printf("Insira os caracteres: "); letra1=getc(stdin), letra2=getc(stdin), letra3=getc(stdin); printf("Você digitou:'%c'e'%c'e'%c'", letra1, letra2, letra3); } // este pgm está errado, não retorna o segundo caractere. // funciona se você digitar os dois caracteres em sequência e depois enter, portanto a primeira instrução deveria ser insira caracteres + enter e a segunda instrução de digitar o segundo caractere é sem efeito. // forma minimizada para três caracteres.
Pessoal como ñ vi ninguém comentando a resposta do pq o programa teste ñ chega a pedir a 2 letra, resolvi comentar;
Bem, é o seguinte:
-Ele ñ pede a 2 letra pq ele já tem. -Mas como assim se eu só digitei uma letra e dei ENTER? -Exato o getc capturou a letra e o ENTER. -Tá e o que tem isso? -Simples. Char só armazena 1 valor. O programa capturou 2 valores no 1º getc e como ele ñ tinha como armazenar os dois valores na variável letra1 ele procurou a proxima variavel no programa e achou letra2.
Quem quiser pode verificar isso prenstando atenção ao fato que o printf imprime uma aspa em linha diferente ou, se quiser, digite ENTER para a mensagem "Insira um caractere: " e digitar qualquer letra numero para a segunda mesagem. O resultado será uma quebra de linha após a primeira aspa e o segundo valor irá retornar normalmente.
14 de janeiro de 2017 às 06:25
No artigo passado de nosso curso de C, aprendemos como usar a função scanf para receber dados do usuário, e com isso fazer programas bem mais dinâmicos.
Porém, lá tratamos só de números (tanto inteiros, como decimais). Mas, muitas vezes, nós precisamos digitar textos em programas.
Por isso vamos aprender como receber letras do usuário.
Vamos explicar o que são e como funcionam as funções scanf, getchar e fflush.
Baixar nossa apostila: Apostila de C
Recebendo caracteres em C através da função scanf()
A função scanf() é bem poderosa e flexível.
Com ela, podemos pegar uma infinidade de dados do usuário, e inclusive escolher o que vai ser 'capturado', limitar o tanto de coisas que pode ser escrito, e uma série de outras funcionalidades que vocês irão aprender durante nosso curso de C.
Porém, há mais opções que facilitam nossa vida.
Existe uma função que faz o mesmo papel da scanf e é voltada para o uso com caracteres, é a getchar().
Ela é mais simples, pois não precisar usar %c ou &, como fazemos na scanf(), e foi feito especialmente para ser usado com caracteres.
get -> pegar
char -> caractere
Para usar, fazemos:
seu_caractere = getchar();
Veja como é seu uso em um código que pede um caractere para o usuário, armazena no char 'letra', e em seguida exibe esse mesmo caractere.
#include <stdio.h>
int main()
{
char letra;
printf("Insira um caractere: ");
letra = getchar();
printf("Você digitou: '%c'", letra);
}
Recebendo caracteres em C através das funçoes fgetc e getc
Essas funções também servem para armazenar caracteres, porém são mais gerais que a getchar(), pois podem receber dados de outras fontes, além da padrão (o teclado - stdin).
Seus usos são semelhantes ao getchar(), porém temos que dizer ao C por onde o programa deve receber as informações.
No nosso caso, e pelo teclado, então fica: fgetc(stind) e getc(stdin)
Por exemplo, um aplicativo em C que recebe duas letras e mostra na tela seria:
#include <stdio.h>
int main()
{
char letra1, letra2;
printf("Insira um caractere: ");
letra1 = getc(stdin);
printf("Insira outro caractere: ");
letra2 = getc(stdin);
printf("Você digitou: '%c' e '%c'", letra1, letra2);
}
É importante que você faça esse exemplo e veja o resultado. Agora teste com as outras funções: scanf e getchar
Estranho esse problema, não?
Isso tem a ver com uma região especial de memória, uma espécie de memória temporária chamada buffer, que vamos estudar mais no próximo artigo do curso C Progressivo.
postado por Programação Progressiva às 10:00 em 9 de dez. de 2012
18 Comentários
Fechar esta janela Ir para formulário de comentárioNão percebo o que estou a fazer errado, independentemente de que função utilize o aplicativo recebe a primeira letra mas não a segunda, indica logo o resultado!
Ex (c/ getchar - o resultado é o mesmo c/ todas):
#include
int main()
{
char letra1, letra2;
printf("Digite uma letra ");
letra1=getchar();
printf("Digite outra letra ");
letra2=getchar();
printf("As letras digitadas foram %c e %c", letra1, letra2);
}
E o resultado é (digitando m):
Digite uma letra m
Digite outra letra As letras digitadas foram m e
Process returned 31 (0x1F) execution time : 2.454 s
Press any key to continue.
20 de fevereiro de 2014 às 18:40
Olá MB,
Leia o tutorial que vem logo na sequência, no índice de nossa apostila, sobre o Buffer em C.
20 de fevereiro de 2014 às 18:44
Olá,
não tem exemplo usando fgetc()
1 de março de 2014 às 10:25
Não se esqueça de inserir a biblioteca do C responsável por estes métodos no cabeçalhos do código.
#include
4 de março de 2014 às 09:45
#include
#include
int main()
{
char letra1, letra2;
printf("Insira um caractere: ");
scanf("%c", & letra1);
printf("Insira outro caractere: ");
scanf("%c", & letra2);
printf("Você digitou: '%c' e '%c'", letra1, letra2);
}
\\-----------------------------
Comigo após eu digitar o primeiro valor a tela fechou e nao exibiu nehum resultado, tentei usar o dois comandos para tentar resolver o problema Getch (); e o Break (); mas não obtive resultado satisfatórios.
26 de agosto de 2014 às 16:00
Galera boa tarde !
estava fazendo o mesmo código aqui e estava com o mesmo problema que vocês .... percebi que não precisava necessariamente de dois "PRINTSFS" . Segue abaixo o código :
#include
int main()
{
char letra1, letra2;
printf("Insira duas letras: ");
letra1 = getc(stdin);
letra2 = getc(stdin);
printf("Voce digitou: '%c' e '%c'", letra1, letra2);
getch();
system("pause");
return 0;
}
no caso ai , você ja digita as duas letra seguidas , ao contrário do exemplo padrão.
22 de outubro de 2014 às 12:27
use system("pause");
25 de outubro de 2014 às 10:06
Uma forma de resolver o problema apresentado no artigo é o uso do fflush(stdin); esse comando limpa o buffer de entrada.
#include
int main()
{
char letra1, letra2;
printf("Insira um caractere: ");
letra1 = getc(stdin);
printf("Insira outro caractere: ");
fflush(stdin);
letra2 = getc(stdin);
printf("Você digitou: '%c' e '%c'", letra1, letra2);
return 0;
}
10 de novembro de 2014 às 05:39
Na minha opinião é melhor usar o gets(variável);, pois ele pode receber várias letras (palavras, frases...).
char palavra[limite de letras];
gets(palavra);
27 de abril de 2015 às 14:09
RenatoM
O segundo pgm na forma descrita para mim não funciona
a contento. Fiz alteração como abaixo
#include
int main ()
{
char letra1, letra2, letra3;
printf("Insira os caracteres: ");
letra1=getc(stdin), letra2=getc(stdin), letra3=getc(stdin);
printf("Você digitou:'%c'e'%c'e'%c'", letra1, letra2, letra3);
}
// este pgm está errado, não retorna o segundo caractere.
// funciona se você digitar os dois caracteres em sequência
e depois enter, portanto a primeira instrução deveria ser
insira caracteres + enter e a segunda instrução de digitar
o segundo caractere é sem efeito.
// forma minimizada para três caracteres.
Sds
16 de julho de 2015 às 21:46
\\faltou colocar o no #include para incluir a biblioteca ;D
#include
int main()
{
char letra1, letra2;
printf("Insira um caractere: ");
scanf("%c", & letra1);
printf("Insira outro caractere: ");
scanf("%c", & letra2);
printf("Você digitou: '%c' e '%c'", letra1, letra2);
}
2 de outubro de 2015 às 06:56
Quando é melhor usar cada função scanf ou getchar ?
22 de outubro de 2015 às 17:35
//Oi, o meu getchar() da erro, quando especifico um valor (quantidade);
#include
int main()
{
char a;
char a[100]; // Falha aqui
printf("Digite seu nome \n");
a = getchar();
printf("Seu nome é %c",a);
getch();
return 0;
// OBS Compilado no Turbo C
}
Por favor visitem meu canal no youtube. Tem gameplays de call of duty e violão. é só digitar na busca rafarnr. Obrigado
13 de dezembro de 2015 às 05:47
Segue a resolução usando scanf:
#include
int main()
{
char letra1,
letra2;
printf("Digite uma letra:\n");
scanf("%c",&letra1);
printf("Digite outra letra:\n");
scanf(" %c",&letra2);
printf("As letras que voce digitou foram: %c e %c\n",letra1,letra2);
return 0;
}
10 de março de 2016 às 07:08
Miqueias o gets não é recomendado, pois pode ter estouro de buffer :\
10 de março de 2016 às 07:10
Para resolver este erro do buffer voce deve inserir um espaço em branco antes do %c no scanf que recebera a variavel do tipo caracter.
Fica assim:
int letra;
printf("Digite uma letra: ");
scanf(" %c", letra);
13 de abril de 2016 às 03:45
quando eu uso getchar, só imprime a primeira letra de uma palavra digitada
14 de abril de 2016 às 21:53
Pessoal como ñ vi ninguém comentando a resposta do pq o programa teste ñ chega a pedir a 2 letra, resolvi comentar;
Bem, é o seguinte:
-Ele ñ pede a 2 letra pq ele já tem.
-Mas como assim se eu só digitei uma letra e dei ENTER?
-Exato o getc capturou a letra e o ENTER.
-Tá e o que tem isso?
-Simples. Char só armazena 1 valor. O programa capturou 2 valores no 1º getc e como ele ñ tinha como armazenar os dois valores na variável letra1 ele procurou a proxima variavel no programa e achou letra2.
Quem quiser pode verificar isso prenstando atenção ao fato que o printf imprime uma aspa em linha diferente ou, se quiser, digite ENTER para a mensagem "Insira um caractere: " e digitar qualquer letra numero para a segunda mesagem. O resultado será uma quebra de linha após a primeira aspa e o segundo valor irá retornar normalmente.
14 de janeiro de 2017 às 06:25