2015-12-28 2 views
3

Когда я запускаю код, он спрашивает меня о моем возрасте. Но не спрашивает секс? В чем проблема с кодом.Последовательный scanfs, второй, не запрашивающий второй ввод от пользователя

#include<stdio.h> 
#include<conio.h> 
int main(void) 
{ 
    int age; 
    char sex; 

    printf("Enter your age \n"); 
    scanf("%d",&age); 
    printf("Your age is %d \n",age); 

    printf("Enter your sex \n");     
    scanf("%c",&sex); 
    printf("Your sex is %c \n",sex); 
    getch(); 
    return 0; 
} 
+1

Предыдущий символ новой строки вводится вместо. – BLUEPIXY

+0

Вам нужно проверить возвращаемое значение 'scanf()': 'if (scanf (...)! = N)/* error * /;' где 'N' - количество ожидаемых назначений. – pmg

ответ

4

Поскольку завершающий символ новой строки \n осталась прежними scanf() ..

Попробуйте

scanf(" %c",&sex); 

Обратите внимание на пробел перед %c. В пространстве используется левая верхняя строка новой строки \n.

5

Вы уезжаете завершающую строку из age сканирования, который затем рассматривается как действительный и достаточный вход для следующих scanf() с %c формата. Изменение

scanf("%d",&age); 

в

scanf("%d%*c",&age); 

к съедают тянущаяся новой строки.


Сказав это, getch() не является стандартной функцией C. Вы должны использовать getchar() вместо stdio.h.

+1

Деталь: 'scanf ("% d% * c ", &age);' будет «съедать» следующий символ после 'age', будь то' '\ n'' или что-то еще. – chux

-1
#include<stdio.h> 
#include<conio.h> 
int main(void) 
{ 
    int age; 
    char sex; 

    printf("Enter your age \n"); 
    scanf("%d",&age); 
    printf("Your age is %d \n",age); 
    fflush(stdin);  // Library function to clean the buffer.. 
    printf("Enter your sex \n");     
    scanf("%c",&sex); 
    printf("Your sex is %c \n",sex); 
    getch(); 
    return 0; 

}

+1

' fflush (stdin); 'будет очистите буфер 'stdin' на некоторых системах, но это неопределенное поведение по спецификации C, а не портативное решение. – chux

Смежные вопросы