我正在尝试在eof和getchar下

问题描述

在下面给出的代码段中。每当我输入一组以ctrl + z结尾的字符时,都应将EOF标记为getchar()。它正在打印所有字符以及最后一个ASCII值为26的另一个字符。我不知道该字符的名称。

我希望程序在我按c​​trl + z的位置结束。但是Ctrl + z仅在输入流为空时起作用。

有人可以解释为什么它返回这样一个笨拙的字符而不是结束程序吗?

#include<stdio.h>
#include<ctype.h>

int main(){

   int c;

   while((c = getchar()) != EOF)
       putchar(c);

   return 0;
}

对不起,我无法上载图片,也没有任何方式显示该字符的值26。ASCII表图表表示26为/ substitute /。我不知道那是什么意思 谢谢。

解决方法

Ctrl + Z是ASCII control character,例如Ctrl + A,Ctrl + B,Ctrl + @等。不是EOFEOF与任何字符都不同:否则,如果getchar()返回该值,您将无法知道它是否已到达文件末尾或已读取该字符。 Ctrl + Z的ASCII值为26。您正在查看键入的内容。

在您的操作系统(大概是Windows)上,每行开头的Ctrl + Z表示已输入完终端。 (更确切地说,我认为代码位于从终端读取的库函数中,而不是从终端本身读取的库函数中。但是由于我不是Windows专家,我在细节上可能是错误的。)它仅在开始时有效行,因为这是从终端读取的库代码的工作方式。在行的开头键入Ctrl + Z时,getchar()会看到文件结束的情况并返回EOF

当您在一行的开头键入Ctrl + Z not 时,它将被视为普通字符。 Windows将其打印为“奇怪的字形”,用于表示不可打印的字符。

大多数ASCII字符的正式含义早已被人们遗忘。有一个ASCII控制字符,曾经用来表示“文件结尾”,或更确切地说是“ end of transmission”,即Ctrl + D,并且在Unix操作系统家族中幸存下来时表示“输入结尾”。在终端行的开头输入的内容,类似于Windows上的Ctrl + Z。 Windows上的association of Ctrl+Z with end-of-file来自不同的操作系统历史沿线,主要来自DEC,这是微软的DOS和Windows的灵感来源。

与您提出的问题不完全相同,但是我建议您使用this answer,这应该有助于消除您对EOF的困惑。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...