c - 当遇到 EOF 字符时,使用 getchar() 从控制台读取字符直到遇到 EOF 字符的循环不会退出

标签 c eof getchar

这是从控制台读取字符并以相反顺序打印它们的程序。

#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)时,它不会退出循环。它不会添加到计数变量,但也不会退出循环。仅当 EOF 字符是换行符之后的第一个字符时,才能正确读取并退出循环。 例如,如果示例输入是:

abcdef
abc
Ctrl+D

那么代码可以正常工作,但如果输入是:

abcdef ctrl+D

循环未退出。 告诉我一种方法来实现这一点。
谢谢

最佳答案

ctrl-D 实际上是 EOT(传输结束)。 ctrl-Z 是 EOF(文件结束)。这不是特定于 unix 的,而是 ASCII 的。 unix 库选择将 EOT 解释为字符 I/O 上输入结束信号的一种方式。

关于c - 当遇到 EOF 字符时,使用 getchar() 从控制台读取字符直到遇到 EOF 字符的循环不会退出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32036364/

相关文章:

C - getchar() 没有正确读取输入的第二个字符

c - 为什么在visual studio C编译器中会抛出这个异常?

c - C 中 getchar 函数返回的值存储在 int 和 char 中的区别

c - 尝试乘以大整数,但得到 1 的乘积

Python C Api 检查 PyObject 是否指向特定的 PyCFunction

c++ - 指向单链表中内存地址的指针,其中没有变量表示每个元素

java - 在java中读取输入直到EOF

java - 文件结束 NullPointerException

c - strptime 给出 "implicit declaration"和 "undefined reference"

c - 为什么unsigned char变量包含EOF?