标题:原来我有38个可用分,追加一下。问题:清空输入流的问题
只看楼主
鹰派程序员
Rank: 2
等 级:论坛游民
帖 子:36
专家分:85
注 册:2012-2-3
结帖率:100%
已结贴  问题点数:20 回复次数:9 
原来我有38个可用分,追加一下。问题:清空输入流的问题
清空输入流的问题
    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(),可还是不行,我现在有点不知道怎么弄了,求高手帮忙。我记得好像不是很复杂吧
谢谢了~~
搜索更多相关主题的帖子: word system 字符串 hello 
2012-02-04 12:05
hahayezhe
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:湖南张家界
等 级:贵宾
威 望:24
帖 子:1386
专家分:6999
注 册:2010-3-8
得分:0 
endl就包含换行和清空了
还有cin是以\n判断输入结束的 不是空格
string有什么特性?你完全没搞明白!

2012-02-04 12:34
lz1091914999
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:四川
等 级:贵宾
威 望:37
帖 子:2011
专家分:5959
注 册:2010-11-1
得分:10 
根据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 编辑 ]

My life is brilliant
2012-02-04 12:44
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:10 
程序代码:
#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;
}

2012-02-04 13:43
鹰派程序员
Rank: 2
等 级:论坛游民
帖 子:36
专家分:85
注 册:2012-2-3
得分:0 
回复 3楼 lz1091914999
额。。。是这样的,这段代码我原本就是想检验一下“string类型的输入操作符读取并忽略开头所有的空白字符,读取字符直至再次遇到空白字符时读取终止”这句话,所以我就用“   hello world”这个试了一下。
等我试玩后,我又联想着写了下面那段代码,针对这段代码,我又写了一段输入,结果输出时在前面先把“   hello world”中的那个world输出来了。因此我想清除下输入流,也查到相关知识了,但不太会用,所以想请教一下。
关键:求高手帮我在第一段代码执行完后,清空一下输入流,怎么清除阿!
2012-02-04 13:48
鹰派程序员
Rank: 2
等 级:论坛游民
帖 子:36
专家分:85
注 册:2012-2-3
得分:0 
回复 2楼 hahayezhe
我明白string的特性。。。。。是我没表达清楚吧,谢谢了~
2012-02-04 13:50
鹰派程序员
Rank: 2
等 级:论坛游民
帖 子:36
专家分:85
注 册:2012-2-3
得分:0 
谢谢你们哈~~
2012-02-04 14:01
lz1091914999
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:四川
等 级:贵宾
威 望:37
帖 子:2011
专家分:5959
注 册:2010-11-1
得分:0 
回复 5楼 鹰派程序员
while (cin.get() != '\n')
    ;
用这段代码就能清除(跳过)该行剩余的字符。

My life is brilliant
2012-02-04 16:01
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:0 
string类型的输入操作符读取并忽略开头所有的空白字符
------ Google一下 noskipws
2012-02-04 16:57
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
得分:0 
就是想清空流的话,用 cin.sync()。
2012-02-04 21:05



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-360384-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.115053 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved