| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1194 人关注过本帖
标题:请教:当cin输入数据类型不匹配时,下次循环到cin时就不执行了??
只看楼主 加入收藏
chief_fu
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2007-3-25
收藏
 问题点数:0 回复次数:9 
请教:当cin输入数据类型不匹配时,下次循环到cin时就不执行了??
程序作用:循环输入一整数,判断是否为质数,当输入“0”时退出。
以下为原代码:
#include<iostream>
using namespace std;
int main()
{
    int i;
    int a;
    while(1)
    { cout<<"please enter the number:[enter 0 to exit]"<<endl;
    cout<<" a = ";
    cin>>a;
    cout<<a<<"rrrrrrrrrrrrrrrrrrr"<<endl;
    //cout<<a<<endl;              调试输入小数时,系统把小数点截断后赋值给a,a还是整型
    if(a==0)                                     //输入“0”退出    
        break;
    else if(a<0)                                 //输入负数时,显示输入错误,等待重新输入
    {
        cout<<"please enter a number that bigger than 0:"<<endl;
        continue;
    }
    else if(a==1)                                //把1作为特殊书处理
        cout<<a<<" is not a sushu"<<endl;
    else                                         //判断是否为质数
        {
        for(i=2;i<=a/2;i++)
        {   if( a%i==0)
{ cout<<a<<" is not a sushu."<<endl; break; } } if (i==(a/2+1)) cout<<a<<" is a sushu."<<endl; } } return 0; }


当输入为整数时,程序按预定的运行;当输入为带小数点的数时,cin>>a;就跳过不执行了;请问这是什么原因?当怎么解决这个问题?



搜索更多相关主题的帖子: cin 类型 数据 输入 
2007-03-25 17:11
cctv2cctv
Rank: 1
等 级:新手上路
帖 子:197
专家分:0
注 册:2006-9-4
收藏
得分:0 
int a;改成double a;试试
2007-03-26 16:39
aipb2007
Rank: 8Rank: 8
来 自:CQU
等 级:贵宾
威 望:40
帖 子:2879
专家分:7
注 册:2007-3-18
收藏
得分:0 
对啊,把输入的小数点后的舍弃了,把整数位保留

Fight  to win  or  die...
2007-03-26 22:34
chief_fu
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2007-3-25
收藏
得分:0 
回复:(chief_fu)请教:当cin输入数据类型不匹配时,...

大哥,我求素数的函数,定义为float 型似乎是自己搬起石头砸自己的脚哦!
还望哪位大虾帮帮忙,我被那个输入输出流搞得头晕晕的。

2007-03-27 23:05
cctv2cctv
Rank: 1
等 级:新手上路
帖 子:197
专家分:0
注 册:2006-9-4
收藏
得分:0 

先定义float再强制转换 看看 (int)(1.234+0.5) 四舍五入
给个链接你参考一下http://topic.csdn.net/t/20040404/10/2923050.html

你用GOOGEL 查找网上有一大片关于你取整

[此贴子已经被作者于2007-3-28 16:54:35编辑过]

2007-03-28 16:50
chief_fu
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2007-3-25
收藏
得分:0 
回复:(chief_fu)请教:当cin输入数据类型不匹配时,...

谢谢各位的热心帮助!
其实你们几位的意思我明白,关键是我想搞清楚那个输入输出流为什么会报错。

2007-03-28 20:59
gch_zsu
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2007-3-29
收藏
得分:0 
回复:(chief_fu)回复:(chief_fu)请教:当cin输入...

我明白你的意思,不过第二次执行到cin时不是不执行,而是直接跳过了cin,进入死循环。我也不知道是怎么回事


2007-03-30 15:11
边城路人
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:9
帖 子:591
专家分:0
注 册:2007-3-8
收藏
得分:0 

因为你定义的是整型的
类型不匹配,程序进入了死循环
你最好把a定义成Double类型的


当你开始怀疑自己时,说明你已经失去了判断力
2007-03-31 18:42
边城路人
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:9
帖 子:591
专家分:0
注 册:2007-3-8
收藏
得分:0 
#include<iostream>
using namespace std;
int main()
{
int i;
double a;
while(1)
{
cout<<"please enter the number:[enter 0 to exit]"<<endl;
cout<<" a = ";
cin>>a;
cout<<a<<"rrrrrrrrrrrrrrrrrrr"<<endl; //cout<<a<<endl; 调试输入小数时,系统把小数点截断后赋值给a,a还是整型
if(a==0) //输入“0”退出
break;
else if(a<0) //输入负数时,显示输入错误,等待重新输入
{
cout<<"please enter a number that bigger than 0:"<<endl;
continue;
}
else if(a==1) //把1作为特殊书处理
cout<<a<<" is not a sushu"<<endl;
else //判断是否为质数
{
for(i=2;i<=a/2;i++)
{
if( (int)a%i==0)
{
cout<<a<<" is not a sushu."<<endl;
break;
}
}
if (i==(a/2+1))
cout<<a<<" is a sushu."<<endl;
}
}
return 0;
}

if( (int)a%i==0) 可以这样改 的

当你开始怀疑自己时,说明你已经失去了判断力
2007-03-31 20:38
wfpb
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:2188
专家分:0
注 册:2006-4-2
收藏
得分:0 
cin>>a;其实也是一个函数,当你回车时函数结束.
而这个函数是把标准输入流中的内容读入到a中,cin>>对基本数据类型都重载了.
所以会根据传给它的参数调用不同的方法,这里调用的是cin.operator>>(int &a);

我的猜想:
如果参数是int型,那么就把流中的数据依次读入参数中,直到遇到非数字或读取数据已经到达2^(8*sizeof(int))的范围时函数结束.
当遇到非数字字符时,cin提取他但不存入a.

可能这里cin读入和判断函数结束的方式不是这样.

[glow=255,red,2]wfpb的部落格[/glow] 学习成为生活的重要组成部分!
2007-03-31 23:55
快速回复:请教:当cin输入数据类型不匹配时,下次循环到cin时就不执行了??
数据加载中...
 
   



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

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