3

我是 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

4

3 回答 3

2

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

迈克尔所说的完全正确。

你可以尝试类似的方式。

于 2012-05-28T10:10:15.373 回答
2

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

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

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

if(key == '\t') {
    // tab over 
}
于 2012-05-28T10:10:29.623 回答
2

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

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

于 2012-05-28T10:17:53.630 回答