| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 552 人关注过本帖
标题:关于CIN的问题,请高手帮忙看看
只看楼主 加入收藏
fc176154001
Rank: 2
来 自:四川阆中
等 级:论坛游民
帖 子:87
专家分:96
注 册:2013-6-16
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:7 
关于CIN的问题,请高手帮忙看看
刚刚学C++,一道习题要求将一个整数集合分成相等的4部分,4等分依次从大到小,然后打印这4部分,
我的想法是建立一个vector变量,然后随机输入一些数据到变量中,然后检测,如果变量中数据个数不是4的倍数,就提示继续输入数据,一直到能够4等分为止,然后使用sort(begin(),end())排序后分成4部分打印出来,但是第二次输入数据的语句直接不执行,这是什么情况,帮我看看,代码如下:
#include"iostream"
#include"algorithm"
#include"vector"
using std::cout;    using std::sort;
using std::endl;    using std::cin;
using std::vector;
int main()
{
    cout<<"请输入整数到集合中:";
    vector<int> set;
    int x;
    while(cin>>x)  //随机输入一些数据,直到输入ctrl+z结束
       set.push_back(x);
    int n=set.size();
    if(n%4!=0) //判断set中数据是否能4等分,如果不能就提示继续输入数据
    {
          cout<<"集合中数据不能4等分,继续输入数据:";
          int y;
          while(n%4!=0)
         {
            cin>>y;  //问题就出在这里,这一句不执行,请问为什么?
            n++;  //这一句是执行过了的,
            set.push_back(y);//如果不重新定义变量,直接用上面的x那么这一句也会执行
        }
    }
    sort(set.begin(),set.end());
    for(int i=n-1,j=0;i>=0;i--)
    {
        if(j%(n/4)==0)
            cout<<endl<<"第"<<j/(n/4)+1<<"部分:";
        cout<<set[i]<<" ";
        j++;
    }
    cout<<endl;
    return 0;
}
就是那个cin>>y;为什么不执行,知道的给我说下 谢谢
搜索更多相关主题的帖子: include 检测 
2013-10-31 00:10
i80286
Rank: 6Rank: 6
等 级:侠之大者
威 望:5
帖 子:99
专家分:428
注 册:2013-9-30
收藏
得分:12 
1、vector成员函数size,返回的值是size_type型,不是int,即:vector<int>::size_type n=set.size();
2、cin是从缓冲区读取数据的,当缓冲区中有残留数据时,cin函数会直接取得这些残留数据而不会请求键盘输入,你可以这样做:在cin>>y前加上两行,cin.clear();cin.sync();
3、你最后一个for循环也是有问题的,输出是错误的
2013-10-31 07:49
fc176154001
Rank: 2
来 自:四川阆中
等 级:论坛游民
帖 子:87
专家分:96
注 册:2013-6-16
收藏
得分:0 
谢谢解答,关于你的第一点,我如果定义vector<int>::size_type n=set.size();类型的话,编译老提示错误,看了下好像是缺头文件,我该给的头文件都给了的,但是还是提示错误,找不到原因,所以我就直接定义int类型了,for循环没有错误,按照你给的方法不会出现错误的数据的,能帮我简单说明下cin.clear();cin.sync();这两个函数的作用吗,百度上面搜索出来的看不太懂,

大神永远不能体会菜鸟们之间的惺惺相惜,
2013-10-31 09:23
fc176154001
Rank: 2
来 自:四川阆中
等 级:论坛游民
帖 子:87
专家分:96
注 册:2013-6-16
收藏
得分:0 
追问一下,如果有代码,  int x;  cin>>x;  这样之后输入的数据还在缓冲区吗,还是输入的数据赋值给x后这个变量x就一直放在缓冲区的,

大神永远不能体会菜鸟们之间的惺惺相惜,
2013-10-31 09:26
期待追忆
Rank: 2
等 级:论坛游民
帖 子:15
专家分:32
注 册:2013-3-14
收藏
得分:2 
回复 楼主 fc176154001
楼主你学C++用那本书的
2013-10-31 11:38
a190205460
Rank: 2
来 自:湖南
等 级:论坛游民
帖 子:29
专家分:59
注 册:2013-10-26
收藏
得分:6 
楼主这里
using std::cout;    using std::sort;
using std::endl;    using std::cin;
using std::vector;
直接用using namespace std;不就行了吗?就不用那么麻烦啦!我也是个新手,如果说错了希望你原谅
2013-10-31 14:00
i80286
Rank: 6Rank: 6
等 级:侠之大者
威 望:5
帖 子:99
专家分:428
注 册:2013-9-30
收藏
得分:0 
看不懂就放在一边,现阶段这不是主要的,简单的说(不一定正确):cin.clear()将错误的标志位复位,但不会修改缓冲区的数据,cin.sync()是将缓冲区内的数据清空,所以这两个函数需要一起用
cin函数是不接受回车、空格、TAB等键值,不要再问为什么,我也不知道
2013-10-31 16:05
fc176154001
Rank: 2
来 自:四川阆中
等 级:论坛游民
帖 子:87
专家分:96
注 册:2013-6-16
收藏
得分:0 
以下是引用期待追忆在2013-10-31 11:38:27的发言:

楼主你学C++用那本书的

Accelerated C++

大神永远不能体会菜鸟们之间的惺惺相惜,
2013-10-31 22:02
快速回复:关于CIN的问题,请高手帮忙看看
数据加载中...
 
   



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

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