【发布时间】:2012-04-20 23:53:52
【问题描述】:
我正在编写一个基本上等待用户点击“输入”然后执行某些操作的函数。我发现在测试时有效的是:
#include <stdio.h>
int main()
{
int x = getc(stdin);
if (x == '\n') {
printf("carriage return");
printf("\n");
}
else {
printf("missed it");
printf("\n");
}
}
我有一个问题,我最初尝试做的是:if (x == '\r') 但在测试中,程序没有让我按回车键。 '\n' 似乎对应于我从控制台输入。有人可以解释其中的区别吗?另外,为了验证,将其写为if... == "\n" 是否意味着字符串文字?也就是说,用户实际上必须从控制台输入"\n",对吗?
【问题讨论】:
-
C 对单引号和双引号文字都应用转义,因此“\n”是长度为两个字符的字符串,第一个是 ASCII 代码 10(\n 本身),第二个是 ASCII NUL(空终止符) .
-
(希望您不要介意对标题的修改,它们是为了使其更易于搜索。)
-
你不能使用 == 在 C 中测试字符串是否相等,你必须使用
strcmp或类似的。char *s1, *s2; if (s1 == s2) {...}只会检查s1和s2是否指向同一内存区域,而不管实际内存内容如何。 -
如果您的标准输入以文本模式打开,那么您的应用程序将总是看到
\n换行,无论\n在您的执行字符集中表示什么意思,并且但是平台会序列化换行符。