| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 512 人关注过本帖
标题:while(std::cin>>value)d的问题
只看楼主 加入收藏
haibohere
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2013-1-14
结帖率:100%
收藏
已结贴  问题点数:5 回复次数:6 
while(std::cin>>value)d的问题
#include<iostream>
int main(void){
    int sum=0, value=0,num=0;
    while(std::cin>>value)
        sum+=value;
    std::cout<<sum<<std::endl;
    std::cin>>num;
    return 0;
}
当我键入Ctrl+z后在键入Enter就直接跳出程序了不能执行怒骂的输入的操作。
或者直接输入非 数字也就直接退出程序了。求指点
搜索更多相关主题的帖子: void 
2013-02-10 10:20
haibohere
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2013-1-14
收藏
得分:0 
还有我用的是vs2010 貌似别人用C-Free就不是这效果 。
如果是编译器的问题谁能给我个简单的c++编译器。就像
C语言的TC20H的那种。谢谢。
2013-02-10 10:24
nicum
Rank: 8Rank: 8
等 级:蝙蝠侠
帖 子:180
专家分:712
注 册:2011-2-1
收藏
得分:0 
ctrl+z是终止输入,std::cin>>value返回false,你的value是int型的输入一个字符也会返回false
2013-02-10 12:27
haibohere
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2013-1-14
收藏
得分:0 
回复 3楼 nicum
还是不太明白,输入的如果不是int类型就返回false的话,那么也是终止输入,怎么直接就结束程序了呢。
2013-02-10 15:05
西域小车
Rank: 1
等 级:新手上路
帖 子:2
专家分:5
注 册:2013-2-4
收藏
得分:5 
cin是istream的对象,istream类下面有badbit,failbit,eofbit三个状态,对应有bad(),fail(),eof()三个方法检测上面三个状态是不是被设置为了true,另外还有一个方法是good(),这个方法是检测流的有效状态,如果流有效则返回true。如果badbit,failbit,eofbit这三个状态有任何一个被设置为了true,那么由方法good()返回的就为false。也就是说流无效。

下面针对你的问题:
while(std::cin >> value)括号里实际是检测cin.good()方法的返回值,如果cin.good()返回为true,则执行循环体。

当遇到ctrl+z,则代表终止输入,即eofbit被设置为true,此时cin.good()返回false,循环体退出。

如果输入了字符串,那么cin在尝试输入的字符串读为int型数据失败后,failbit被设置为true,那么此时cin.good()也返回为false,循环体退出。
2013-02-10 18:29
haibohere
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2013-1-14
收藏
得分:0 
回复 5楼 西域小车
你写的我看的也大概明白点。我是个初学者,这这问题我最想知道的是在输入Ctrl+z或者其他非数字的时候推出循环以后,为什么就直接结束了整个函数,而不是只退出了while循环。
2013-02-10 21:09
西域小车
Rank: 1
等 级:新手上路
帖 子:2
专家分:5
注 册:2013-2-4
收藏
得分:0 
回复 6楼 haibohere
对于这个问题具体的我不太清楚,不过我猜也许是cin的流被破坏了就不可以使用了吧,并且需要清空缓冲区,你的那个代码可以这样写。
程序代码:
#include<iostream>
int main()
{
    int sum=0, value=0,num=0;
    while(std::cin>>value)
        sum+=value;
    std::cout<<sum<<std::endl;
    if (!std::cin.good())  //如果cin无效
    {
        std::cin.clear(); //将cin输入流重置为可用
        std::cin.sync(); //清空缓冲区
    }  
    std::cin>>num;
    return 0;
}

2013-02-11 00:37
快速回复:while(std::cin>>value)d的问题
数据加载中...
 
   



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

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