OccamaRazor
@OccamaRazor

Как исправить цикл «while», чтобы выводилось одно значение игнорируя перенос строки?

int main(void)
{
	printf(" Type :");
	char i= getchar();
	
	while (i != 'A' && i != 'B' && i != 'C')
	{
		printf("\nYou choose incorrect type, please repeat...\nEnter r type :");
		i= getchar();
	 }


}


Результат :
You choose incorrect type, please repeat...
Enter r type:
You choose incorrect type, please repeat...
Enter r type:( место для ввода )
  • Вопрос задан
  • 217 просмотров
Пригласить эксперта
Ответы на вопрос 2
@Mercury13
Программист на «си с крестами» и не только
Подкорректируй строчку так…
printf("\nYou choose incorrect type, %c please repeat...\nEnter r type :", i);

и посмотри, что там будет на месте %c…
Сможешь сам объяснить эффект?

А как считать символ при интерактивной работе? Я бы написал свою функцию, которая считывает символ и всё, что забуферизировалось за ним аж до перевода строки.
Ответ написан
@abcd0x00
Когда ты вводишь символ, тебе нужно нажать <return> (Enter). Так вот этот приводит к тому, что за введённым символом сразу посылается символ перевода строки \n. На следующем шаге цикла он считывается и обрабатывается как обычный символ, поэтому получается проскок.

Как это решается: нужно сделать функцию input_char().
Нужно считать строку до конца, а потом из считанной строки выбрать первый символ. Для считывания строки можно использовать fgets(), а для считывания символа из полученного символьного массива можно использовать sscanf(). Это способ fgets() + sscanf().
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы