Franklin Ferreira

Respostas no Fórum

Visualizando 1 post (de 1 do total)
  • Autor
    Posts
  • em resposta a: O comando fflush(stdin); não está funcionando #160809
    Franklin Ferreira
    Participante

    Algumas 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”, &nota1);
    getchar();

    //——————————————
    printf(“Cadastrando segunda pessoa:\n”);
    printf(“Nome: “);
    fgets(nome2, sizeof(nome2), stdin);

    printf(“Sexo [M/F]: “);
    sexo2 = getchar();

    printf(“Nota: “);
    scanf(“%f”, &nota2);
    getchar();

    //——————————————
    printf(“Cadastrando terceira pessoa:\n”);
    printf(“Nome: “);
    fgets(nome3, sizeof(nome3), stdin);

    printf(“Sexo [M/F]: “);
    sexo3 = getchar();

    printf(“Nota: “);
    scanf(“%f”, &nota3);

    //——————————————
    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);
    }

Visualizando 1 post (de 1 do total)