getchar не получает ввод после scanf, fgets и printf - PullRequest
1 голос
/ 21 июня 2019

Итак, я написал эту простую программу на C, которая читает некоторую информацию в цикле, а затем спрашивает пользователя, верен ли введенный им ввод, но последний ввод (y \ n) никогда не выделяется красным цветом из консоли.

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

int main(){
    char *name=malloc(sizeof(char)*20),*surname=malloc(sizeof(char)*20),awnser,c;
    int age,tries=1;
    while(1){
        printf("try %d\n",tries++);

        printf("enter name: ");             
        fgets(name,19,stdin);
        strtok(name,"\n");

        printf("enter surname: ");  
        fgets(surname,19,stdin);
        strtok(surname,"\n");

        printf("enter age: ");
        scanf("%d",&age);

        printf("so you are %s %s %d years old? (y/n)\n",name,surname,age);


        awnser=getchar();
        if(awnser=='y'){
            break;
        }
    }
    free(surname);
    free(name);
}

Ожидаемый результат:

try 1 
enter name: bill 
enter surname: mpris 
enter age: 344 
so you are bill mpris 344 years old? (y/n) 
n 
try 2 
enter name: bill 
enter surname: 
moris enter age: 34 
so you are bill moris 34 years old? (y/n) 
y

Вывод программы:

try 1
enter name: bill
enter surname: moris
enter age: 34 
so you are bill moris 34 years old? (y/n)
try 2
enter name:

Кто-нибудь знает, почему это происходит? Я пытался поставить fflush (stdin) после каждого fgets, но у меня все еще была та же ошибка. Я могу представить, что это связано с буфером и что какой-то символ (вероятно, \ n) читается, но getchar

...