标题:为什么会进入死循环!
只看楼主
IT男year
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:82
专家分:106
注 册:2013-6-9
结帖率:100%
 问题点数:0 回复次数:4 
为什么会进入死循环!
#include<iostream>
#include<string>
using namespace std;
int main()
{
    int x=1,m=1,i,y;
    string a;
    while(x)
    {   
        if(m)
        {
            cout<<endl<<"请选择创建产品的方式:";
            cin>>y;
        }        
        switch(y)
        {
        case 1:cout<<"请输入产品名:";m=1;break;
        default:cout<<"亲!你的选择不在服务范围内,请重新选择!";cin>>y;m=0;i--;
        }
        if(m)
        {
            cout<<"产品已经成功被创建,是否继续创建新产品?";
            cin>>a;
            if(a=="是")
                x=1;
            else
                x=0;
        }
        i++;
    }
    return 0;
}
为什么输入一个字母的时候,就进入了死循环???求大神详解!

[ 本帖最后由 IT男year 于 2013-11-2 11:36 编辑 ]
搜索更多相关主题的帖子: 产品 你的选择 include default 
2013-11-02 11:34
风雨123
Rank: 2
等 级:论坛游民
帖 子:84
专家分:65
注 册:2013-2-23
得分:0 
y 定义的是整型, 你输入字母,数据类型不同, 具体我也不知道。
2013-11-02 12:18
左手拉一只猫
Rank: 4
来 自:杭州
等 级:业余侠客
帖 子:70
专家分:250
注 册:2013-10-27
得分:0 
当你输入一个字母时,y接受了字母的ASCII码(即y获得了值,目测你输入的字母的ASCII码不为)
default:cout<<"亲!你的选择不在服务范围内,请重新选择!";cin>>y;m=0;i--;
这句里面你把m赋值为0,那么这个while(x)循环里面所有关于if(m)都无法再次进入,也就无法对x的数值进行操作,所以就变成了死循环。由于不知道你这个程序,要做什么,也就不好改了。不过问题应该是出在这里。。。

我能帮你的只能到这里了。。。
2013-11-02 16:46
IT男year
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:82
专家分:106
注 册:2013-6-9
得分:0 
回复 3楼 左手拉一只猫
当输入一个字母后,电脑不是会执行“default:cout<<"亲!你的选择不在服务范围内,请重新选择!";”吗?当执行完这句后,不是还有一句“cin>>y;”吗?电脑难道不会停在这里等待输入y的值吗?
2013-11-03 18:40
不要脸的猫
Rank: 3Rank: 3
等 级:论坛游侠
威 望:2
帖 子:41
专家分:126
注 册:2012-6-20
得分:0 
当用cin提取一个非整形数据到整形变量时,由于类型不匹配,变量将不会被赋值仍然存储着定义时的随机值,cin流会产生错误并同时将相应状态位置1,除非该错误状态位被重新置零,否则流提取将不会继续正常工作,用cin.clear()即可清除!所以,首先需要清除错误状态位!另外,由于未被提取的输入字符会一直停留在输入缓冲区首部,所以在清除完错误状态位后要想继续读取,还应去除缓冲区首部的字符,用cin.get()即可!之后方可继续读取!

埋骨何须桑梓地,人生无处不青山
2013-11-04 01:50



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




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

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