在一个SO答案中,我写了以下代码:
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
总是在文本模式下工作吗?
当然,这很容易。你可以从包含该字符的文件中读取,也可以做一些类似的事情(在Linux和类似的操作系统下):
printf "r" | yourProgram
或者甚至从允许转义的终端程序中,例如CTRL-VCTRL-M。
然而,在C世界中,这并不被认为是行的末尾,它订阅了用于指示行的末尾的LF
方法。来自C11 7.21.2 Streams /2
:
文本流是由字符组成的有序序列,每行由零个或多个字符加上终止换行字符组成。
在输入和输出时可能必须添加、更改或删除字符,以符合在宿主环境中表示文本的不同约定。
换句话说,尽管一些系统在底层环境中使用不同的行结束字符,但它们中的许多系统在C环境中进行自动翻译,以确保代码按预期运行。