开发者社区> 问答> 正文

求问关于c++里的while (cin >> string)

string line;
while (cin >> line) 
cout << line << endl;

为什么输入"Hello world"会输出
Hello
world
明白不会有空格,但是为什么会出来两个string?而且是聚集出来的?输出之前这两个string都存到哪里了?

展开
收起
a123456678 2016-03-05 11:30:09 1839 0
1 条回答
写回答
取消 提交回答
  • #include <iostream>
    #include <unistd.h>
    #include <string>
    #include <cstdio>
    using namespace std;
    int main(void)
    {
        string line;
        while(cin>>line){
        cout<<line<<endl;
        printf("[--printf--]");//buffer io
        fprintf(stderr,"[--stderr--]");//no buffer
        }   
        puts("\n");
        return 0;
    }
    

    (注意输入,仍然有空格)
    输入:123 456
    123
    --stderr--456
    --stderr--
    我们都知道stderr流是不带缓存区的,你可以看到123比它输出在前,说明空格符居然刷新缓存区的作用。
    而printf是带缓存区的,printf缓存区的内容与456在遇到endl后刷新缓存区,所以输出。
    接下来的--stderr--只是程序顺序执行的必然结果。

    2019-07-17 18:53:06
    赞同 展开评论 打赏
问答分类:
C++
问答地址:
问答排行榜
最热
最新

相关电子书

更多
使用C++11开发PHP7扩展 立即下载
GPON Class C++ SFP O;T Transce 立即下载
GPON Class C++ SFP OLT Transce 立即下载

相关实验场景

更多