| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 711 人关注过本帖, 2 人收藏
标题:C++怎么解决类型输入不匹配问题?
只看楼主 加入收藏
outsider_scu
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:3
帖 子:430
专家分:1333
注 册:2010-10-21
结帖率:100%
收藏(2)
已结贴  问题点数:100 回复次数:7 
C++怎么解决类型输入不匹配问题?
例如:
程序代码:
#include<iostream>
using namespace std;
int main()
{
    int a,b;
    while(1)
    {
       cin>>a>>b;
       cout<<a<<b<<endl;
       if(a==b) break;
    }
    system("pause");
    return 0;
}

上面这段程序,如果输入字符'a',就进入死循环了。
这样的问题不是致命的么?怎么解决啊??
搜索更多相关主题的帖子: 类型 输入 
2010-11-17 22:07
m21wo
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:4
帖 子:440
专家分:1905
注 册:2010-9-23
收藏
得分:30 
当你输入 a 时,编译器就知道你输入错误不是整形,就会丢弃,按回车,就不在执行输入b了,同时分配 给a,b赋值,在我的编译器都是-858993460,故a=b,跳出循环!!执行完!
 
输入之后 可以用
程序代码:
#include<iostream>
using namespace std;
int main()
{
    int a,b;
    while(1)
    {
s:      cin>>a;
        if(cin.fail())
        {
            cin.clear();
            cin.ignore();
            goto s;
        }
        cin>>b;
        cout<<a<<b<<endl;
        if(a==b) break;
    }
    system("pause");
    return 0;
}

 

If You Want Something, Go Get It, Period.
2010-11-17 22:30
outsider_scu
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:3
帖 子:430
专家分:1333
注 册:2010-10-21
收藏
得分:0 
还有更体面的解决方式吗?难到每个输入都要这么处理,还要用GOTO?

编程的道路上何其孤独!
2010-11-17 22:46
lintaoyn
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:4
帖 子:606
专家分:2499
注 册:2009-4-8
收藏
得分:70 
程序代码:
#include<iostream>
using namespace std;
int main()
{
    int a,b;
    while(1)
    {
       cin>>a>>b;
       if(cin.fail()){ cerr << "input error";break;}
       cout<<a<<b<<endl;
       if(a==b) break;
    }
    system("pause");
    return 0;
}

cin.fail() 检测是否出现错误的输入格式。

迭代的是人,递归的是神。
2010-11-18 08:33
lintaoyn
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:4
帖 子:606
专家分:2499
注 册:2009-4-8
收藏
得分:0 
程序代码:
#include<iostream>
#include<string>
using namespace std;
int main()
{
    string buf;
    int a,b;
    while(1)
    {
       
      while(!(cin >> a >> b))
      {//还可以提示出现输入错误
          cin.clear();//使流能用。
          cin >> buf;//将错误的字符全部排尽。
      }
       cout<<a<<b<<endl;
       if(a==b) break;
    }
    system("pause");
    return 0;
}

这样能体面点。

迭代的是人,递归的是神。
2010-11-18 08:59
outsider_scu
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:3
帖 子:430
专家分:1333
注 册:2010-10-21
收藏
得分:0 
程序代码:
#include<iostream>
#include<string>
using namespace std;
int main()
{
    int a,b;
    while(1)
    {
      
      while(!(cin >> a >> b))
      {//还可以提示出现输入错误
          cout<<"input error"<<endl;
          cin.clear();//使流能用。
          cin.ignore(100,'\n');
      }
       cout<<a<<b<<endl;
       if(a==b) break;
    }
    system("pause");
    return 0;
}

这样真的很体面。。。
谢了。。。
体会很深。。。

编程的道路上何其孤独!
2010-11-18 13:45
只手驾破船
Rank: 1
等 级:新手上路
帖 子:13
专家分:1
注 册:2010-11-13
收藏
得分:0 
写得好啊,我还没学到这里,学习了
2010-11-18 17:08
VenusNefu
Rank: 2
等 级:论坛游民
帖 子:14
专家分:11
注 册:2010-11-24
收藏
得分:0 
perfect 受用
2010-11-24 12:33
快速回复:C++怎么解决类型输入不匹配问题?
数据加载中...
 
   



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

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