Member 13763735 Ответов: 2

Как я очищаю буфер от сигнала char ?


#include <stdio.h>

void main()
{
	int num, sum = 0;
	char answer;

	while (1)
	{
		printf_s("add another number ? ");
                //here need to clean the buffeer	
              	scanf_s("%c", &answer);

		if (answer == 'n' || answer == 'N')
			break;
		printf_s("enter the number : ");
		scanf_s("%d", &num);
		sum += num;
	}
	printf_s("Total sum is %d\n", sum);
}


Что я уже пробовал:

Эй, мне нужно очистить буфер для того, чтобы каждый раз задавать вопрос "добавить еще одно число? "
и ждать ответа.
теперь программа получит первую букву "У" (да) и больше не будет ждать ответа на этот вопрос.
пожалуйста помочь

2 Ответов

Рейтинг:
2

KarstenK

Ответ таков: Нет, вам не нужно очищать переменную, потому что новый вход записывает ее.

Но если вы хотите, вы можете это сделать.

while (1)
{
  printf_s("add another number ? ");
  answer = 0;//clear buffer 
  scanf_s("%c", &answer,1);//added size of the buffer
  //better exit check
  if( (answer != 'y') && (answer =! 'Y') )
	break;


Рейтинг:
1

Jochen Arndt

С scanf, этот %d формат будет потреблять ведущие пробелы, которые могут находиться во входном буфере (например, новая строка не читается в конце предыдущего ввода), в то время как %c формат этого не сделает. Но вы можете сделать это, вставив пробел перед форматом:

scanf_s(" %c", &answer);