stdin是否包含回车符(\ r)char?

在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-V CTRL-M

但是,这不被认为是C世界中的行尾,它订阅了用于指示行尾的LF方法。 来自C11 7.21.2 Streams /2

文本流是由行组成的有序字符序列,每行由零个或多个字符加上终止的换行符组成。

可能必须在输入和输出上添加,更改或删除字符,以符合在主机环境中表示文本的不同约定。

换句话说,尽管某些系统在底层环境中使用不同的 行结束字符 ,但是其中许多系统在C环境中进行自动转换以确保代码按预期运行。