Цикл для чтения символов из консоли до появления символа EOF с использованием getchar() не завершается при обнаружении символа EOF
Вот программа для чтения символов из консоли и их печати в обратном порядке.
#include<stdio.h>
main()
{
int ch, count = 0;
char a[100];
printf("Enter Charachters\n");
ch = getchar();
while(ch != EOF && count<100)
{
a[count] = ch;
count = count+1;
ch = getchar();
}
printf("\ncount = %d\n",count);
while (count>0)
{
count = count -1 ;
putchar(a[count]);
}
}
Мой квестон: когда мы вводим символ EOF (ctrl+D) после ввода нескольких символов в консоли, он не выходит из цикла. Это не добавляет к переменной count, но также не выходит из цикла. Только если символ EOF является первым символом после символа новой строки, он читается правильно и цикл завершается. Например, если образец ввода:
ABCDEF
азбука
CTRL + D
Тогда код работает нормально, но если ввод:
abcdef ctrl + D
Цикл не завершен. Скажи мне, как это сделать.
Спасибо
1 ответ
Ctrl-D на самом деле EOT (конец передачи). Ctrl-Z - это EOF (конец файла). Это не специфично для Unix, это ASCII. Библиотеки Unix выбирают интерпретацию EOT как способа сигнализировать об окончании ввода в символьном вводе / выводе.