Respostas no Fórum
-
AutorPosts
-
Franklin Ferreira
ParticipanteAlgumas instruções parecem não funcionar mais da mesma forma. Trabalhar com me pareceu complicado, mas vou compartilhar o que entendi e espero que ajude alguém. E, claro, fiquem à vontade para me corrigir se eu estiver errado.
Para entrada de <u>string</u>, utiliza-se: <b>fgets(variável, tamanho, stdin);</b>
Para entrada de <u>char</u>, pode-se usar: <b>scanf(” %c”, &variável);</b> ou <b>variável = getchar();</b>Entretanto, para trabalhar com o <u>char</u> parece surgir algumas regrinhas:
– Se houver um <b>variável = getchar();</b> seguido (não necessariamente na linha seguinte) de outro <b>variável = getchar();</b>, é necessário inserir um <b>getchar();</b> entre eles para limpar o bufffer.
– Se houver um <b>scanf(“formatação”, &variável);</b> seguido de um <b>variável = getchar();</b>, também é necessário um <b>getchar();</b> intermediário.
– Já se a ordem for <b>variável = getchar();</b> seguido de um <b>scanf(“formatação”, &variável);</b>, o código funcionará corretamente.O problema está no uso correto do <b>getchar();</b> em relação ao <u>buffer</u>.
– <u>scanf</u> lê apenas o que precisa e deixa o \n (quebra de linha) no buffer. Se já houver um \n, é ele que será lido na próxima operação, caso não haja outro caractere.
– <u>getchar</u> lê um único caractere do buffer, incluindo o \n. Por isso, pode acabar lendo apenas a quebra de linha se o buffer não for limpo antes.
– <u>fgets()</u> lê – até o \n ou até atingir o limite de caracteres. Por isso, é o único que não interfere negativamente no buffer.Meu código ficou assim, tentei deixa-lo o mais limpo possível:
#include <stdio.h>
#include <locale.h>void main(){
setlocale(LC_ALL, “Portuguese”);char nome1[30], nome2[30], nome3[30];
char sexo1, sexo2, sexo3;
float nota1, nota2, nota3;//——————————————
printf(“Cadastrando primeira pessoa:\n”);
printf(“Nome: “);
fgets(nome1, sizeof(nome1), stdin);printf(“Sexo [M/F]: “);
sexo1 = getchar();printf(“Nota: “);
scanf(“%f”, ¬a1);
getchar();//——————————————
printf(“Cadastrando segunda pessoa:\n”);
printf(“Nome: “);
fgets(nome2, sizeof(nome2), stdin);printf(“Sexo [M/F]: “);
sexo2 = getchar();printf(“Nota: “);
scanf(“%f”, ¬a2);
getchar();//——————————————
printf(“Cadastrando terceira pessoa:\n”);
printf(“Nome: “);
fgets(nome3, sizeof(nome3), stdin);printf(“Sexo [M/F]: “);
sexo3 = getchar();printf(“Nota: “);
scanf(“%f”, ¬a3);//——————————————
printf(“NOME\t\tSEXO\tNOTA\n”);
printf(“%s\t\t%c\t%0.1f\n”, nome1, sexo1, nota1);
printf(“%s\t\t%c\t%0.1f\n”, nome2, sexo2, nota2);
printf(“%s\t\t%c\t%0.1f\n”, nome3, sexo3, nota3);
} -
AutorPosts