| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 747 人关注过本帖
标题:为什么最后的 if 里面的 switch 没有执行! why ?
只看楼主 加入收藏
mxstone
Rank: 1
来 自:广州
等 级:新手上路
帖 子:19
专家分:0
注 册:2014-8-19
结帖率:100%
收藏
已结贴  问题点数:10 回复次数:8 
为什么最后的 if 里面的 switch 没有执行! why ?
刚刚跑去继续做暑假的作业,恩,修改功能按思路写完之后,一编译连接完后没有错误(好吧有点小鸡冻,,,运行,嗯,一路下去都非常好,结果我发现,最关键的修改地方的switch 没有执行,寻思了会儿,,why。?老天爷,why。。放我去洗澡吧。。妈妈咪..
咳咳,下面是代码,就是if里面的switch,运行时候没有执行。。

void ChangeDataFromFile()
{
    long repos;
    int iDataCount=0;
        int Num=0;
    int Answer;

    char inName[NUM1];
    char inNum[NUM1];
    char inTitle[NUM2];
    char inWage[NUM2];

    fstream iofile;
    iofile.open("WageMessage.dat",ios::binary|ios::in|ios::out);

        iofile.seekg(0,ios::end);          /*位移指针到距离文件尾部0个位置处,即文件尾部*/
    repos=iofile.tellg();              /*获取指针当前位置,即文件长度*/
    iDataCount=repos/(NUM1+NUM1+NUM2+NUM2); /*得到文件记录数*/
   
        cout <<"请输入您要修改的人员编号 : ";
    cin >>Num;
    cout <<endl;

    if(Num < 0 && Num > iDataCount)       /*判断删除的是否超出现有记录*/
    {
        throw "输入错误,不在范围之内哦亲";
    }
        else
        {   iofile.seekg((Num-1)*(NUM1+NUM1+NUM2+NUM2),ios::beg);

        memset(inName,0,NUM1);             /*将变量清零*/
            memset(inNum,0,NUM1);
            memset(inTitle,0,NUM2);
            memset(inWage,0,NUM2);
   
            iofile.read(inName,NUM1);         /*读取信息*/
        iofile.read(inNum,NUM1);
        iofile.read(inTitle,NUM2);
        iofile.read(inWage,NUM2);

        cout <<"搜索到的信息为:"<<endl;    /*让用户验证即将修改的信息*/
        cout <<"1.姓名:"<<inName<<endl;
            cout <<"2.工号:"<<inNum<<endl;
            cout <<"3.职位:"<<inTitle<<endl;
            cout <<"4.工资:"<<inWage<<endl;

            cout <<"是否为您所需要的目标信息,是请输入1否则输入2 :";
        cin >>Answer;
        if(Answer==1)                                        /*确认要修改信息正确,开始执行修改*/
            {   cout<<"请选择你想要更改的信息";
            cout<<endl;
        switch(GetSelect())
        {
        case 1:
                cout <<"请输入你想更改的名字"<<endl;
                cin >>inName;
                break;
        case 2:
                cout <<"请输入你想改变的工号"<<endl;
                cin >>inNum;
                break;
        case 3:
                cout <<"请输入职称更改"<<endl;
                cin >>inTitle;
                break;
        case 4:
                cout <<"请输入要改变的工资额"<<endl;
                cin >>inWage;
                break;
            }
           iofile.seekp((Num-1)*(NUM1+NUM1+NUM2+NUM2),ios::beg);  /*写入修改完的信息*/
           iofile.write(inName,NUM1);
           iofile.write(inNum,NUM1);
           iofile.write(inTitle,NUM2);
           iofile.write(inWage,NUM2);
           cout <<"修改完成!"<<endl;
           WaitUser();
        }
        else WaitUser();

    }
}


附带运行图,第一个为存有的信息(确认里面有东西),第二个开始是程序的执行
图片附件: 游客没有浏览图片的权限,请 登录注册
图片附件: 游客没有浏览图片的权限,请 登录注册
图片附件: 游客没有浏览图片的权限,请 登录注册
可以看出switch没有执行啊.....

[ 本帖最后由 mxstone 于 2014-8-19 22:23 编辑 ]
搜索更多相关主题的帖子: 老天爷 
2014-08-19 22:22
apull
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:三体星系
等 级:版主
威 望:216
帖 子:1509
专家分:9241
注 册:2010-3-16
收藏
得分:0 
输出一下 GetSelect() 的值看看在不在switch的范围里。
2014-08-19 23:03
mxstone
Rank: 1
来 自:广州
等 级:新手上路
帖 子:19
专家分:0
注 册:2014-8-19
收藏
得分:0 
问题被自己解决了,,于是新的问题出来了。。。 我把Switch里面的Getselect()函数改为i 在外面先int i=0;cin>>i;就会执行Switch(i)就可以选择了....  下面是Getselect函数,求大神指点为什么在上面没有执行,可是我菜单里面的switch也是这么写的,可以用啊!
int GetSelect()           /*获取选择*/
{
    char buf[256];
    gets(buf);
    return atoi(buf);   /*atoi 将字符串变为整数*/
}

始乱终弃.
2014-08-19 23:03
mxstone
Rank: 1
来 自:广州
等 级:新手上路
帖 子:19
专家分:0
注 册:2014-8-19
收藏
得分:0 
回复 2 楼 apull
我把那个Getselect函数发出了。我自己在程序上做了改动可以正常执行了。 但为什么同样是switch(GetSelect())在另外一个函数里面可以用 这个在if里面不能用啊 ,你可以看我的回复。

始乱终弃.
2014-08-19 23:05
w851777025
Rank: 7Rank: 7Rank: 7
来 自:新疆
等 级:黑侠
威 望:2
帖 子:135
专家分:584
注 册:2014-1-19
收藏
得分:0 
调试一下,看看你的程序是不是按照你的思路走的.
2014-08-19 23:54
stop1204
Rank: 9Rank: 9Rank: 9
来 自:福建省
等 级:贵宾
威 望:22
帖 子:295
专家分:1151
注 册:2013-9-8
收藏
得分:10 
下面这个只是看一部分的结论,然后重新看了下.我发现我错了.  
其实你只要将 cout<<endl; 改成 cin.sync()    对于简单的显示endl的作用你暂时当做回车键来用吧.
______________________________________________
很煎蛋.  
你加一个 default :  cout<<"No match";
然后你会看见你输出的是这句话.

原因:

    char buf[256];        //空字符
    gets(buf);            //接收字符串
    return atoi(buf);   // 如果 buf 第一个字符不是数字 , 则atoi调用函数返回 0
                        //如果第一个字符是数字,则返回直到遇到非数字.
                        //例 as12as1   //返回 0
                        // !@#!@    返回0
                        // 12as3as  返回12
                        // 1a1s     返回1
   你的case只有返回等于 1 \ 2 \ 3 \ 4 才会执行,其他情况全部跳过.

hl928452957@gmail点com

2014-08-20 08:20
stop1204
Rank: 9Rank: 9Rank: 9
来 自:福建省
等 级:贵宾
威 望:22
帖 子:295
专家分:1151
注 册:2013-9-8
收藏
得分:0 
加个cin.sync()问题解决.分数全扔来吧

hl928452957@gmail点com

2014-08-20 08:24
xiao89
Rank: 1
等 级:新手上路
帖 子:11
专家分:9
注 册:2012-7-8
收藏
得分:0 
菜鸟膜拜了,大神好厉害,这么牛叉的函数,看来我的路还是好远
2014-08-20 10:46
mxstone
Rank: 1
来 自:广州
等 级:新手上路
帖 子:19
专家分:0
注 册:2014-8-19
收藏
得分:0 
回复 5 楼 w851777025
但是,我执行的时候,它好像是完全跳过去了,我什么都没输入就显示修改完了. 后来我改了cin>>x ;switch(x)就可以了。

始乱终弃.
2014-08-21 14:27
快速回复:为什么最后的 if 里面的 switch 没有执行! why ?
数据加载中...
 
   



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

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