考虑下面的简单示例
#include <iostream>
int main()
{
using namespace std;
char name[30];
cout << "What is your first name: ";
cin >> name;
cout << "Hello " << name << endl;
return 0;
}该程序的示例输出如下:
What is your first name: Bob
Hello Bob这个程序按预期工作,但我不明白输出流是如何到达下一行的。我基本上是在思考两个独立的信息流,对于输出流知道如何进入下一个信息流感到困惑,仅仅是因为它后面跟着输入。换行符从何而来??
发布于 2015-02-14 21:41:36
输出流不会转到下一行。
键入名称后按回车。终端具有本地回波,这意味着您在键盘上输入的字符将被回显到终端。
屏幕上看到的"Bob“和换行符是因为您输入了它们,而不是因为它们是由您的程序发送给cout的。
如果使用的终端关闭了本地回波,或者从包含Bob的文件中输入管道,则输出如下所示:
What is your first name: Hello Bob发布于 2015-02-14 21:12:13
新行来自返回字符,该字符用于在使用cin命令时提交名称。之所以放置它,是因为它是用户在输入"Bob“时最初编写的。
发布于 2015-02-14 21:28:07
这就是写在终端机上的东西:
你的名字是什么?鲍勃\n你好鲍勃\n
这就是它的来源(斜体从你的程序写到标准输出,粗体从终端回显):
你的名字是什么: Bob\n 你好Bob\n
当用户输入(shift)+B、O、B时,终端缓冲区保存Bob。由于终端是行缓冲的,stdin还没有收到任何数据。
现在,用户按回车键。这由行缓冲终端将其视为行的末尾,因此stdin现在可以看到Bob\n。operator<<(cin, name)遵循格式化输入函数的规则,放弃前导空格,然后将数据传输到结果,直到找到另一个空白为止。
现在,name包含"Bob" (这里没有换行符),cin已经用掉了换行符来结束这个输入操作。
https://stackoverflow.com/questions/28520350
复制相似问题