【发布时间】:2010-11-17 06:19:46
【问题描述】:
我正在使用以下条件语句从标准输入中读取数据。
if ((n = read(0,buf,sizeof(buf))) != 0)
当从标准输入输入数据时,一般用户在完成后按回车键。但是read() 也将 '\n' 视为输入,在这种情况下n = 1 并且条件不会评估为假。除了检查 buf 的内容之外,当用户在标准输入上按 enter(不输入任何内容)时,有没有办法使条件评估为 false。除了read() 之外,我还有什么其他功能可以用于此目的吗?
就此而言,当输入来自标准输入 (stdin) 时,读取确定输入结束的方法是什么?
【问题讨论】:
-
你想做什么?一次读一个字符?
-
不,正如您从条件中看到的那样,我正在从标准输入读取到缓冲区(也许只是将其写回标准输出)。当用户没有输入任何内容并按回车键时,我想停止。
-
啊,我明白了。我读错了。
-
请解释为什么您正在寻找一种无需检查缓冲区即可确定空行的方法。我真的不明白它的原因。您始终可以编写自己的函数来检查缓冲区,但在文件结束时返回 0,在错误时返回 -1,在空行中返回 和 '\n'。如果您逐个字符地读取缓冲区,那么您可以开箱即用地为此目的使用标准函数;但这相当于检查您的缓冲区;-)。
-
基本上,我想知道是否可以在不检查缓冲区的情况下从标准输入终止行尾。就像我从文件中读取一样,当 EOF 发生时,读取调用会自动终止。在这种情况下,无需检查缓冲区的内容。