使用getc从控制台读取\ r(回车)vs \n(换行符)?

MCP*_*MCP 23 c console newline getc

我正在写一个基本上等待用户点击"输入"然后做某事的功能.我发现在测试时有效的方法如下:

#include <stdio.h>

int main()
{
        int x = getc(stdin);
        if (x == '\n') {
                printf("carriage return");
                printf("\n");
        }
        else {
                printf("missed it");
                printf("\n");
        }
}
Run Code Online (Sandbox Code Playgroud)

我的问题,以及我最初尝试过的是:if (x == '\r')但是在测试中,该程序没有让我碰到输入.这'\n'似乎对应于我从控制台进入输入.有人可以解释这个区别吗?另外,要验证,写它if... == "\n"是否意味着字符串文字?即用户真的必须"\n"从控制台进入,对吗?

Why*_*rrh 42

\n是换行符,\r而是回车符.他们使用它们的不同之处.Windows用来\r\n表示按下了回车键,而Linux和Unix \n用来表示按下了回车键.

因此,我总是使用,\n因为它被所有人使用; 并且if (x == '\n')是测试角色平等的正确方法.


jos*_*mas 13

'\n'是"换行",'\ r'是回车符.不同的操作系统将以不同的方式处理新线路,例如

视窗

期望换行符是两个字符的组合,'\ r \n'.

Linux\Unix和Modern Mac OS

使用单个'\n'表示新行.

经典Mac OS

使用单个'\ r'表示新行.

基本上,我会使用,if (x == '\n')因为它目前被所有现代操作系统使用.

  • 我猜你的意思是'\ r'换行的经典Mac OS,因为现代Mac OS X是UNIX并使用'\n'换行符. (3认同)