Цикл для чтения символов из консоли до появления символа 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 как способа сигнализировать об окончании ввода в символьном вводе / выводе.

Другие вопросы по тегам