关于EOF和EOL的问题
Questions about EOF and EOL
我正在尝试理解EOF和EOL,以及c++ iostream实际上是如何工作的。
当通过getchar()
或getche()
输入char
变量时,我发现如果我写这样的行:
char a;
a = getche(); // it returns char 'r' if pressed enter
a = getchar(); // it returns char 'n' if pressed enter
为什么这些值?
到底是什么让c++认为我们已经耗尽了输入(i) ?)
当读/写一个文件,有一些字符串句子以
'n'
结束,然后发生什么,如果行以NULL
字符结束,这也表示行结束?
你能用例子简单地解释一下这些吗?
同时在
char
中通过getchar()
或getche()
取输入变量,我发现如果我写这样一行:char a; a = getche(); // it returns char 'r' if pressed enter a = getchar(); // it returns char 'n' if pressed enter
首先,getche
是来自conio.h
的POSIX函数,它是非标准的,并且在所有主要的工具链中都已弃用。
这是一个非缓冲的、非格式化的读操作。当你的输入流使用rn
作为行结尾时(在Windows上很常见),那么你正在读取第一个字符r
。
当您执行getchar()
时,您将获得第二个字符n
。这也是一个C函数。
我接下来的回答将是关于c++的。
是什么让c++认为我们不需要提供任何输入(即总是n使c++认为它是输入的结束?)
缓冲I/O函数倾向于用n
来分隔读,是的。std::getline
有一个参数,允许您更改此分隔符:
std::istream& std::getline(std::istream& is, std::string& str);
std::istream& std::getline(std::istream& is, std::string& str, char delim);
这只是一个分隔符。你可能认为它表示"行结束",但它肯定不是"文件结束"。
当读取/写入文件时(该文件有一些字符串句子结尾)用n。那么,如果行以空字符结尾,这也表示字符串结束?).
空字符不重要。
空字符唯一的问题是在没有附带长度信息的c风格char
缓冲区字符串中。确定字符串长度的唯一方法是搜索结尾的空字符(参见:strlen
),如果在数据的有用部分中分散有任意其他空字符,则会出现问题。
如果你传递一个指向char
数组的指针,并且的大小与int
相同,那么它可以包含任意多的空字符。
当从流中读取字符时,在C 或 c++中,使用的函数会告诉您读取了多少字符。所以,即使其中一些是空字符,也没关系。你可以按你认为合适的方式处理它们。
什么char表示行结束,而写/什么char表示读取时输入行结束?
我不太明白这个问题,但我将通过简要描述文件结束来结束我的回答。
历史上,文件有一个物理字符