注册 登录
编程论坛 C++教室

原来我有38个可用分,追加一下。问题:清空输入流的问题

鹰派程序员 发布于 2012-02-04 12:05, 940 次点击
清空输入流的问题
    string s;
    cin>>s;
    cout<<s<<endl;
    system("pause");
  //  cin.clear();
    system("cls");
////////////////////////
    string word;
    while(cin>>word)
    {
        cout<<word<<endl;
    }
    system("pause");
对于s,我输入的是:hello  world,根据c++中string类型的特点,第一个cout输出的是hello,由于hello和world之间的空格,所以world在这步不输出
对于string word,比如我输入的是:hdsj  a dh ad ,那么结果也应该在把这些字符串输出一遍。可是输出的结果在最开始多了一个world(hello world中的world),我知道有这个world是肯定的,所以就想先将输入流清除一下,于是用了cin.clear(),可还是不行,我现在有点不知道怎么弄了,求高手帮忙。我记得好像不是很复杂吧
谢谢了~~
9 回复
#2
hahayezhe2012-02-04 12:34
endl就包含换行和清空了
还有cin是以\n判断输入结束的 不是空格
string有什么特性?你完全没搞明白!

#3
lz10919149992012-02-04 12:44
根据c++中string类型的特点,第一个cout输出的是hello?
我不明白楼主这句话的意思,这应该是C++流的特性吧,跟字符串有什么关系呢?
cin.clear()只是清除流中的错误标记,并不是清空缓冲区。比如:
int i;
cin >> i;
如果输入的时候没有输入数字(比如输入s)那么这个输入是无效的,因为i是整形。这就会导致error这个标记被设置,从而不能再使用标准输入流,解决方法就是用cin.clear();用这个函数可以清除错误标记,所以第一个cin >> s之后,world还在缓冲区里面,之后才是hdsj a dh ad。
更多信息楼主可以去看看C++ Primer或Thinking in C++。


[ 本帖最后由 lz1091914999 于 2012-2-4 12:45 编辑 ]
#4
rjsp2012-02-04 13:43
程序代码:
#include <string>
#include <limits>
#include <iostream>
using namespace std;

int main()
{
    string s;
    cin >> s;
    cout << s << endl;
    cin.ignore( numeric_limits<streamsize>::max(), '\n' );

    cout << "////////////////////////" << endl;

    string word;
    while(cin>>word)
    {
        cout<<word<<endl;
    }

    return 0;
}

#5
鹰派程序员2012-02-04 13:48
回复 3楼 lz1091914999
额。。。是这样的,这段代码我原本就是想检验一下“string类型的输入操作符读取并忽略开头所有的空白字符,读取字符直至再次遇到空白字符时读取终止”这句话,所以我就用“   hello world”这个试了一下。
等我试玩后,我又联想着写了下面那段代码,针对这段代码,我又写了一段输入,结果输出时在前面先把“   hello world”中的那个world输出来了。因此我想清除下输入流,也查到相关知识了,但不太会用,所以想请教一下。
关键:求高手帮我在第一段代码执行完后,清空一下输入流,怎么清除阿!
#6
鹰派程序员2012-02-04 13:50
回复 2楼 hahayezhe
我明白string的特性。。。。。是我没表达清楚吧,谢谢了~
#7
鹰派程序员2012-02-04 14:01
谢谢你们哈~~
#8
lz10919149992012-02-04 16:01
回复 5楼 鹰派程序员
while (cin.get() != '\n')
    ;
用这段代码就能清除(跳过)该行剩余的字符。
#9
rjsp2012-02-04 16:57
string类型的输入操作符读取并忽略开头所有的空白字符
------ Google一下 noskipws
#10
pangding2012-02-04 21:05
就是想清空流的话,用 cin.sync()。
1