为啥 while (cin \u003e\u003e string) 的输出结果是这样

第二种写法是如何做到在一次输入之后把两个分割的string保存到同一个string变量里并一起输出的?你输入了一行 "hello world",如果你调试一下, while 循环进行了两次,输出也是分两次,第一次读入 hello 到 line,输出;第二次读入 world 到 line, 输出。line 作为一个 string 对象,被反复赋不同的值,为何不能理解呢?如果你想把 "hello world" 一次性读入到 line , 应该使用 getline :string line;getline(cin, line);cout \u0026lt;\u0026lt; line \u0026lt;\u0026lt; endl;谢 @王月 邀请。

■网友
string line;cin \u0026gt;\u0026gt; line;cout \u0026lt;\u0026lt; line \u0026lt;\u0026lt; endl; 【为啥 while (cin \u003e\u003e string) 的输出结果是这样】 这里cin保存从标准输入读取的流,也就是“hello world”,
然后cin通过"\u0026gt;\u0026gt;"运算符将流写入line。写入时有个问题,就是你所说的”空格是cin的分隔符“,即遇到空格时会停止。这样line中只存储了”hello“,“world”没能存进去。所以cout\u0026lt;\u0026lt;line时,也就只能输出"hello"
while (cin \u0026gt;\u0026gt; line) cout \u0026lt;\u0026lt; line \u0026lt;\u0026lt; endl;这里第一次循环时和上面说的情况一样,输出了“hello"。此时cin中没有”hello“了,剩下了”world“。
第二次循环时,cin中剩下的内容,也就是”world“,同样通过"\u0026gt;\u0026gt;"运算符被写入到了line中(覆盖了之前内容),之后通过cout输出。
所以此例中,不是”在一次输入之后把两个分割的string保存到同一个string变量里并一起输出的“,而是分成两次输出,每次循环输出一个单词。

■网友
谢邀。你的问题是什么……并没有一起输出啊?读一行用cin.readline()。cin确实会返回流,如果成功,这样你才可以写cin\u0026gt;\u0026gt;a\u0026gt;\u0026gt;b
■网友
第一个流中,cin的用法是应该改进的,如果想读取一行输入正确的方法是cin.get(line,20/*这里写读入字符数量,可以为其他值*/).get();或者getline(cin,line).get();第二个语句while的循环条件决定了输入一次就会进行一次输出,所以题主在输入之后有了一次换行,然后有了一次输出。endl是换行符,刷新缓存区可以加一个cin.get();题主可以结合plus和primer一起看,plus更适合入门


    推荐阅读