【问题标题】:Will cin recognize \n typed in from keyboard as a newline character?cin 会将键盘输入的 \n 识别为换行符吗?
【发布时间】:2012-06-02 16:54:46
【问题描述】:

我是 C++ 初学者,如果这个问题听起来很愚蠢,我很抱歉..

我制作了这个小程序来帮助我熟悉cin的属性:

#include <iostream>
#include <string>
using namespace std;

int main()
{
    string next;
    cout<<"Enter your input.\n";
    cin>>next;
    cout<<next;
    return 0;
}

当我从键盘输入中输入\n 时,返回的是\n

此外,当我将变量 next 从字符串更改为字符并为其提供与上述相同的输入时,我只返回了一个 \

我的问题是:为什么我没有返回一个新行呢? cin 不能将键盘输入的 \n 识别为换行符吗?还是只适用于cout

【问题讨论】:

    标签: c++ newline


    【解决方案1】:

    \n 是 C++ 中的转义序列;当它出现在字符常量或字符串文字中时,这两个字符序列被替换为代表默认基本编码中的新行的单个字符(在现代系统中几乎总是 0x0A)。 C++ 定义了许多这样的转义序列,都以\ 开头。

    输入的映射方式不同,在许多情况下,取决于设备。从键盘读取时,大多数系统会缓冲一整行,并且只有在按下 Enter 键时才从其中返回字符;回车键发送给 C++ 程序的内容可能会有所不同,文件是否以文本模式或二进制模式打开也会有所不同——在文本模式下,C++ 库应与操作系统协商以确保回车键总是产生由\n 表示的单个字符。 (std::cin 始终以文本模式打开。)键盘驱动程序是否对\ 进行特殊处理取决于驱动程序,但大多数情况下不会。当从键盘输入时,C++ 不会对 \ 做任何特别的事情(并且 \n 在 C++ 源代码中除了字符串文字和字符常量之外没有特殊含义)。

    【讨论】:

    • James 我能这样理解吗:\n 代表输出中的换行符,但输入中不会发生这种情况?
    • @Vokram:不。\n 表示在 C++ 源代码中输入字符串或字符文字时的换行符。编译器将其转换为字节 0x0a,运行时只能看到该字节。
    • @Vokram 不,\n 不代表输出中的换行符。它表示字符串文字和字符常量中的换行符。如果在输出流中输出包含` and n, successively, you get two characters, `和n的两个字符。
    【解决方案2】:

    如果您需要您的程序在输入时将\n 识别为换行符,您可以检查一下: https://stackoverflow.com/a/2508814/815812

    迈克尔所说的完全正确。

    你可以尝试类似的方式。

    【讨论】:

      【解决方案3】:

      从技术上讲,这取决于您的程序之外的事情,但假设您的终端只是传递与“\”和“n”字符相对应的单个字节(我认为任何理智的人都会这样做),那么你的行为预计会看到。

      "\n" 只不过是添加到编程语言和环境中的快捷方式,让您更轻松地表示 ASCII 返回键的概念。它本身不是一个字符,只是一个命令告诉程序生成一个对应于按 Enter 键的不可打印字符。

      假设您在记事本或其他任何东西中,然后按 Tab 键。它在一个点上标记。键入“\t”只输入文字字符“\”和“t”。在内部,写记事本的人必须说明当用户按下 Tab 时它应该做什么,他通过使用像

      这样的助记符来做到这一点
      if(key == '\t') {
          // tab over 
      }
      

      【讨论】:

      • 我还是有点糊涂……如果将 \n 逐字读取到字符串变量中,为什么它也没有在输出中转换为新行?
      • @Vokram:就是这样。如果 \n 被逐字读取到字符串变量中,它不会在输出中转换为新行,因为没有这样的转换。绝不。如果你写"\n",编译器会解释它,变量会包含换行符。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多