【问题标题】:how to read newline character in c如何在c中读取换行符
【发布时间】:2013-01-11 04:01:54
【问题描述】:

谁能解释一下下面的代码

#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

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

【问题讨论】:

标签: c output


【解决方案1】:

您是按字面意思输入\,然后输入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;

【讨论】:

  • 我不明白你。单个 char 变量 c[i] 如何保存两个字符 (\\)
  • @Sibi: '\\' 是一个字符。
  • 谢谢!解决了我的问题。但是这段代码怎么来的 'char c[]="abc\nabc";'将 '\n' 存储为单个字符?
  • 因为"\n" 是一个新行的转义序列,您的编译器 会将其转换为适当的单个代码点(或取决于设置的宽代码点)。您的控制台/shell/TTY/文本文件不知道也不关心 C 转义序列。
【解决方案2】:

在字符串文字或 char const 中,'\n' 是一个字符,其中 \ 称为转义字符。但作为输入,'\' 是一个真实字符,而不是转义字符。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-07
    • 1970-01-01
    相关资源
    最近更新 更多