如何在c中读取换行符

时间:2013-01-11 04:01:54

标签: c output

有人可以解释以下代码

#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

如何让程序正确读取换行符?

2 个答案:

答案 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'是一个字符,其中\称为转义字符。但作为输入,'\'是一个真正的角色而不是逃避角色。