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

问题描述

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

string line;
while (cin >> line)
cout << line << endl;
为什么输入"Hello world"会输出
Hello
world
明白不会有空格,但是为什么会出来两个string?而且是聚集出来的?输出之前这两个string都存到哪里了?

解决方案

你这个问题涉及缓冲区,但是具体怎样分析,我给你如下代码事例:

#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--][--printf--]456
[--stderr--][--printf--]
我们都知道stderr流是不带缓存区的,你可以看到123比它输出在前,说明空格符居然刷新缓存区的作用。
而printf是带缓存区的,printf缓存区的内容与456在遇到endl后刷新缓存区,所以输出。
接下来的[--stderr--][--printf--]只是程序顺序执行的必然结果。

解决方案二:

存入了输入缓冲区,std::cin和std::cout是带缓冲的,所以会出现这个现象。

解决方案三:

是因为里面有回车或换行符吧。

解决方案四:

空格也是cin的分隔符啊

解决方案五:

这种情况,是我用geiline 的,你可以试试

时间: 2024-11-18 08:16:26

求问关于c++里的while (cin &amp;gt;&amp;gt; string)的相关文章

求问关于c++里的while

问题描述 求问关于c++里的while #include #include int main() { int i,sum,x; i=1; sum=0; while(i>=1/100000) { sum=i+sum; i=1/i+1; printf("%dn",i); } x=sum-double log10(double 100000); printf("%dn",x); return 0; } 为什么总是错? 解决方案 http://codepad.org/

java bin文件-java 代码内容如下(客户端要生成bin文件才能交互)求问 public.bin 文件如何生成的

问题描述 java 代码内容如下(客户端要生成bin文件才能交互)求问 public.bin 文件如何生成的 public static void main(String[] args) throws Exception { CertHelper help = CertHelper.getHttpCert(); Cert cert = new Cert("ticket", "8000", "http://127.0.0.1:8080/service/rbc

求问如何在C# 窗体中 获取txt文件里的坐标 然后以点的形式显示到picturebox里

问题描述 如题求问如何编程让txt里的坐标点以点的形式显示到窗体的picturebox里 解决方案 解决方案二:你想干嘛,把文字显示为图片?解决方案三:都知道坐标点了,直接画在picturebox上就行了,如果需要换算,你得知道换算规则,然后折算到picturebox内部坐标解决方案四:1.你需要确认你的坐标系,坐标系中心点的位置2.确定pictureBox的大小是根据你已定坐标区域大小的等比缩放,如果存在等比缩放,那么在读取点时候就要处理点的坐标值缩放3.绘制过程,在paint中实现点的绘制就

javascript-本人新手,求问大家一个最简单的,就是js跳个小窗口,然后填写内容,再注册到数据库里???

问题描述 本人新手,求问大家一个最简单的,就是js跳个小窗口,然后填写内容,再注册到数据库里??? 本人新手,求问大家一个最简单的,就是js跳个小窗口,然后填写内容,再注册到数据库里,用的是asp.net的. 就是说先设置div隐藏,然后再用js拿到div里的值,在codebehind里可以拿到这些值就行了,求教求教 解决方案 本人觉得你可以JS调用AJAX来访问数据库.使用JS从页面得到数据然后用AJAX把数据丢到后台.再后台把这些数据丢到数据库里面. 解决方案二: http://www.cn

求问delphi里链接数据库后运行出现如下问题,谢谢

问题描述 求问delphi里链接数据库后运行出现如下问题,谢谢 求问delphi里链接数据库(SQL 2000)后运行出现如下问题,进入界面进行数据查询,在edit里只要输入任何东西都会弹出这个运行错误界面..实在不知道到底什么原因了..求大神帮忙解答一下,谢谢! 解决方案 补充!本身界面样子~ 解决方案二: 你的返回的结果集中没有重量这个字段? 解决方案三: 重量这个字段对应的类型不对

c语言-求问一个C语言字符指针的问题

问题描述 求问一个C语言字符指针的问题 #include void Initialize (char * a, char * b) { a[0] = 'T'; a[1] = 'h'; a[2] = 'i'; a[3] = 's'; a[4] = ' '; a[5] = 'i'; a[6] = 's'; a[7] = ' '; a[8] = 'A'; a[9] = ''; b = a; b[8] = 'B'; } #define ARRAY_SIZE 10 char a[ARRAY_SIZE];

ajax-Ajax+nodejs新手求问!

问题描述 Ajax+nodejs新手求问! 我有一个页面A,其中通过iframe加载了一个页面B.页面B里有个表单,表单里有个submit按钮.我在这个B页面的js中为这个submit按钮添加了一个事件函数.在这个事件函数中我创建了一个XMLHttpRequest实例xhr1.然后后台我用nodejs接收提交的表单数据并发送响应内容.我想让响应内容出现在父页面A的特定位置上. 现在数据接收.发送响应内容都没有问题,问题是响应的内容不能出现在A页面特定位置上. 我xhr1的onreadystate

求问大神一条安卓开发的问题

问题描述 求问大神一条安卓开发的问题 我写的一个app,每次打开后占用的内部存储空间都会成倍增长,但是我这只app并没有联网,在运行的时候并没有增加任何数据,只是每次打开时都从数据库里把一些图片,文字读出来并赋值,一开始的时候是2m多,按后退键退出后再打开,然后再退出,占了3m多,然后重复这样打开退出打开退出,每次app的占用内部存储空间都近乎两倍来增长,最后占了57m多的时候,就提示说出现oom了,请问这是怎么回事?为什么我没有往里面添加数据,它都会疯狂增长? 我从数据库里读取数据的时候使用a

各位大神,求问一个leetcode的问题

问题描述 各位大神,求问一个leetcode的问题 我编写leetcode的第89题gray code, 发现我自己电脑编译出的结果和网页的编译结果不同,甚是蛋疼!原码如下:class Solution {public: vector grayCode(int n) { if (n ==0 ){ vector outcomes; outcomes.push_back(0); return outcomes; } else if (n == 1) { vector outcome; outcome