有人可以解释以下代码
#include<stdio.h>
main()
{
char c[]="abc\nabc";
puts(c);
}
此代码按预期生成:
abc
abc
但是当我尝试将相同的字符串作为用户的输入时,
#include<stdio.h>
main()
{
char c[]="abc\nabc";
gets(c); // i type in "abc\nabc"
puts(c);
}
此代码生成:
abc\nabc
如何让程序正确读取换行符?
答案 0 :(得分:4)
您是否真的键入\
然后n
?
如果是这样,它确实在您的字符串中放置了\
然后放置了n
,就好像您执行了以下操作:
char c[] = "abc\\nabc"; /* note the escaped \ */
这在逻辑上不是换行符,而是\
后跟n
。
如果您想在用户输入中支持escape sequences,则需要对任何用户输入进行后处理以创建适当的转义序列。
/* translate escape sequences inline */
for (i = 0, j = 0; c[i] != 0; ++i, ++j) {
if (c[i] == '\\' && c[i+1] != 0) {
switch(c[++i]) {
case 'n': c[j] = '\n'; break;
case '\\': c[j] = '\\'; break;
/* add the others you'd like to handle here */
/* case 'a': ... */
default: c[j] = ' '; break;
}
} else {
c[j] = c[i];
}
}
c[j] = 0;
答案 1 :(得分:2)
在字符串文字中或作为char const,'\ n'是一个字符,其中\称为转义字符。但作为输入,'\'是一个真正的角色而不是逃避角色。