【问题标题】:Reading \n from stdin with read()使用 read() 从标准输入读取 \n
【发布时间】:2014-09-18 13:30:39
【问题描述】:

我想从标准输入读取一个字符串,它包含多行,由 \n 分隔,但问题是,如果我尝试从标准输入读取字符串,遍历所有字符,如下所示:

char buff;
while(read(0, &buff, 1) > 0)
     foo(buff);

它正在读取像“hello\n”这样的字符串,因为它具有字符h-e-l-l-o-\-n,而不是末尾的新行作为字符。我该如何解决?

【问题讨论】:

  • 你可以通过修正你的输入来修正它。换行符,在 ASCII 中,是 0x0a。如果您正在阅读带有“n”(0x6e)的内容,则说明您的输入已损坏,而不是您的程序。

标签: c newline stdin


【解决方案1】:

'\n' 转义序列由编译器解释。在键盘上输入它或从文件中读取它不会产生换行符:您实际上是从输入中取回两个字符 - 首先是斜线,然后是小写 'n' 字符。

如果您输入了换行符,请按键盘上的 Enter,或在输入文件中添加换行符。

【讨论】:

  • 所以如果我想能够使用 \n 作为新行,那么我必须寻找 2 个字符 \ 和 n 的序列?
  • 只是因为用户将负责输入,所以我想尽可能少地留下错误
  • @dietbacon 对,如果你想把转义序列当作特殊字符,你需要自己写一点代码来处理它。幸运的是,这不是一个太难的练习:寻找一个反斜杠,设置一个escape 标志,然后在后面的字符上运行一个switch,将序列解释为\n\r\t ,等等。
最近更新 更多