Вызов fflush(stdin);
после того, как scanf
отказаться от любых ненужных символов (например, \ г \ п) из входного буфера, которые были оставленной scanf
.
Редактировать: Как ребята в упомянутых комментариях fflush
решение может иметь проблему переносимости, так что вот мое второе предложение. Не используйте scanf
и выполняйте эту работу, используя комбинацию fgets
и sscanf
. Это гораздо более безопасный и простой подход, поскольку позволяет обрабатывать неправильные исходные ситуации.
int x,y;
char c;
char buffer[80];
printf("x:\n");
if (NULL == fgets(buffer, 80, stdin) || 1 != sscanf(buffer, "%d", &x))
{
printf("wrong input");
}
printf("y:\n");
if (NULL == fgets(buffer, 80, stdin) || 1 != sscanf(buffer, "%d", &y))
{
printf("wrong input");
}
c = getchar();
'getchar()' возвращает 'int', а не' char'. – unwind
@unwind - «Возвращает следующий символ из стандартного ввода (stdin)». - ascii для char – Yakov