| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2033 人关注过本帖
标题:明白switch的来一下,看你会解决吗?
只看楼主 加入收藏
wv136
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2010-5-7
收藏
得分:0 
回复 2楼 刚开始吧
我帮你改下....完全可以运行,当输入为字母时,退出程序!!!


#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
    int ch; //这里声明了一个变量!!是char型的就把下面绿色部分改成 while(ch =='1')
    cin >> ch; //在这里应该有 cin >> ch;  接受用户的输入..
    while(1)  //这里的问题就大咯 ,,while(1)貌似就不会有第二个选择!!这样写 while(ch ==1)
    {  //请注意这个花括号!
        cout<<"1 增加姓名"<<endl;
        cout<<"2 删除姓名"<<endl;
        cout<<"0 退出"<<endl;
        cout<<"请输入你的选项:"<<endl;
      //因为不明白你需要什么样的结果,如果没有猜错,下面就应该跳出while循环,当然得有个花括号吧!!
      break;
     } //如果没有这个花括号,那么下面的switch语句还是在while语句中循环的一部份。

        cin>>ch;  //再次等待输入...
        switch(ch)   //判断输入的字符....
        {
        case 1:cout<<"增加成功"<<endl;break;
        case 2:cout<<"删除成功"<<endl;break;
        case 0:return 0;  //这里应该用 break;跳出,return 0;只是返回,用在函数最后的。
       default:continue;  //这是捕获其它字符的,遇编译时出错,请改为 default:break;!!
        }
  //  } //这个花括号,多余的。
    return 0;  //函数执行完成,返回..
}

//复制代码,修改一下需要更改的错误,按ctrl +F5 执行...

[ 本帖最后由 wv136 于 2010-5-8 06:58 编辑 ]
2010-05-08 06:20
apull
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:三体星系
等 级:版主
威 望:216
帖 子:1479
专家分:9055
注 册:2010-3-16
收藏
得分:0 
回复 楼主 刚开始吧
switch(ch)
        {
        case '1':cout<<"增加成功"<<endl;break;
        case '2':cout<<"删除成功"<<endl;break;
        case '0':return 0;
        default:continue;
        }
这里的break的意思退出switch,然后继续执行switch后面的语句。

程序执行后除了按0外,会一直循环下去。

vc,gcc运行正常。
2010-05-09 18:24
刚开始吧
该用户已被删除
收藏
得分:0 
回复 21楼 wv136
提示: 作者被禁止或删除 内容自动屏蔽
2010-05-09 19:38
刚开始吧
该用户已被删除
收藏
得分:0 
回复 22楼 apull
提示: 作者被禁止或删除 内容自动屏蔽
2010-05-09 19:40
wv136
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2010-5-7
收藏
得分:0 
一直没有时间上来,原来还没有解决呀!!如今再发::
#include<iostream.h> //如果编译错误更改一下
//#include<iomanip>
//using namespace std;  //还有这个取消注释。
int main()
{ int ch=0;                 //这里使用的是 int 类型的变量;
          do
        {
        cout<<"1 增加姓名"<<endl;
        cout<<"2 删除姓名"<<endl;
        cout<<"0 退出"<<endl;
        cout<<"请输入你的选项:"<<endl;
        cin>>ch;
        }while (ch>=3||ch<0);
    goto end;

end:      
switch(ch)
{
case 1:cout<<"增加成功"<<endl;break;
case 2:cout<<"删除成功"<<endl;break;
case 0:break;
    //return 0;
    //default:continue;
}
    return 0;
}


/////最后,当你输入非0、1、2数字时,do循环,输入字符就会退出。
/////改为char类型可以完全达到你想要的效果哦!
////不知你满意不??????????????
2010-05-16 00:11
Muyoo
Rank: 2
来 自:北京交通大学
等 级:论坛游民
帖 子:20
专家分:26
注 册:2010-3-28
收藏
得分:0 
回复 12楼 刚开始吧
switch语句在编译时case的选择全是整型常表达式的话,似乎default也将认为是判断整型。
所以当你在运行程序输入字符以后,是先将这个字符存在缓冲区里进行判断:a不是整型-->(再判断)-->a还不是整型-->(再判断一次)-->a怎么又不是整型-->(再来)-->a仍然不是整型-->……
就死循环了……

避免这个死循环最好就是在用户输入值后在执行switch前加段代码判断;或者清空缓冲区;
另外不知楼主是不是用的VC6.0?

[ 本帖最后由 Muyoo 于 2010-5-19 08:42 编辑 ]
2010-05-19 00:42
fanfan320
Rank: 3Rank: 3
来 自:运城
等 级:论坛游侠
帖 子:82
专家分:104
注 册:2010-5-12
收藏
得分:0 
budong
2010-05-19 14:50
hahayezhe
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:湖南张家界
等 级:贵宾
威 望:24
帖 子:1386
专家分:6999
注 册:2010-3-8
收藏
得分:0 
int i;
cin>>i;

当你输入字符时 cin就去缓冲区 一看是字符 类型不匹配 怎么办 只能空跑一趟
这时i没有被赋值
如果你这么写
int i=10;
cin>>i;键入 a
cout<<i; 输出10;说明没有给i赋任何值
这时如果外面套个循环while(1)的话
为真 那么当程序到cin<<i;时 缓冲区有东西 所以他不会让你再继续输入,cin会将你先前输入的
字母a拿去判断 发现类型不匹配 继续循环
怎么解决呢
fflush(stdin) 只要将那个该死在缓冲流里的字母清理掉 就行了
比如while(1)
{fflush(stdin);
cin>>i;}
当然你用getchar()也可以
这样就不形成死循环了
而且你还可以给i赋个初值 如果其值没有改变 那说明输入非法
当然也可以用字符接收后面的'\0'来判断输入正确与否
比如c=getchar() 如输入正确 c='\0' 如错误 c=输入的字母 这种现象貌似只限于scanf
2010-05-19 15:20
快速回复:明白switch的来一下,看你会解决吗?
数据加载中...
 
   



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

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