Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Alex Camargo

Não executa o getchar()

Recommended Posts

Olá,

Quando executo o código abaixo e escolho a opção "1", o programa não espera o usuário digitar o texto e já passa para a próxima instrução.

 

Coloquei um "sleep(5)" depois do "printf("Digite seu texto e pressione ENTER: ");" somente para testar e dessa maneira o programa espera (dentro do limite do sleep) o usuário digitar seu texto a ser gravado.

 

Estou compilando no LINUX.

 

Se alguém puder me ajudar, agradeço.

 

#include <stdio.h>
#include <stdlib.h>

int main (void)
{

    FILE *fptr;
    char ch;
    int escolha;

    do{
		
        printf("\tMenu\n\n0)Sair\n\n1)Inserir\n\n2)Imprimir\n\nOpção: ");
        scanf("%d", &escolha);		

        switch (escolha)
        {
            case 1:
            {
                if ((fptr=fopen("exercicio.txt", "w"))==NULL)
                {
                    printf ("Erro ao abrir.");
                    return 1;
                }

                printf("Digite seu texto e pressione ENTER: ");
                while ((ch=getchar())!= '\n')
                {
                    fputc(ch,fptr);
                }

                fclose(fptr);
	           
                break;
            }


            case 2:
            {
                if ((fptr=fopen("exercicio.txt", "r"))==NULL)
                {
                    printf ("Erro ao abrir");
                    return 1;
                }
                while ((ch=fgetc(fptr))!=EOF) 
                {
                    printf("%c", ch);
                }
                fclose(fptr);
                
                printf("\n\n");

                break;
            }

            default:
            {
                if(escolha!=0) 
                printf("\n\n Opcao inválida!\n\n");

                break;

            }
        }
    }while (escolha!=0);

    return 0;

}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

@@Alex Camargo

 

Voce pode tentar limpar o "buff", talvez seja por isso que pula essa instrucao direto...

 


...

printf("Digite seu texto e pressione ENTER: ");
/*Limpando o buff*/
do
{
   ch = getchar();
} while (ch != '\n' && ch != EOF);

//...
while((ch = getchar()) != '\n' && ch != EOF)
{
   fputc(ch,fptr);
}
...

 

Nao sei se vai resolver... ou se é a melhor opcao...

 

brHUE

Compartilhar este post


Link para o post
Compartilhar em outros sites

@brhue

 

Fiz algo parecido, resolvi colocando um getchar() após o scanf.

printf("\tMenu\n\n0)Sair\n\n1)Inserir\n\n2)Imprimir\n\nOpção: ");
scanf("%d", &escolha);
getchar(); //limpa o buffer do teclado, por isso estava passando direto
Obrigado pela dica.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.