在SO answer我写了这段代码:
char fail_on_eof (int c)
{
if (c == EOF)
exit (EXIT_FAILURE);
return (char) c;
}
void skip_to_next_line (void)
{
char c;
do
{
c = fail_on_eof (getchar ());
} while (c != '\n');
}
我想知道是否有任何终端可能会返回'\r'
(只要在行尾有'\n'
,就会被上述代码覆盖。)
stdin
是否包含'\r'
(在任何平台上)?那么输入重定向stdin
总是在文本模式下工作?
答案 0 :(得分:4)
当然,这很容易。您可以从包含该字符的文件中读取,或者您可以执行类似操作(在Linux和类似操作系统下):
printf "\r" | yourProgram
甚至来自允许转义的终端程序,例如 CTRL-V CTRL-M 。
然而,在C世界中,它不被视为行尾,它订阅了LF
方法来指示行尾。来自C11 7.21.2 Streams /2
:
文本流是按行排列的有序字符序列,每行 由零个或多个字符加上一个终止的换行符组成。
可能必须在输入和输出上添加,更改或删除字符,以符合在主机环境中表示文本的不同约定。
换句话说,尽管某些系统在底层环境中使用不同的 line ending character,但其中许多系统在C环境中进行自动转换,以确保代码按预期运行。