| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 729 人关注过本帖
标题:求教,我该如何修改我的代码
只看楼主 加入收藏
c3242404
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2014-6-22
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:4 
求教,我该如何修改我的代码
/*显示一个菜单,提供加减乘除选项,选择后程序要求输入2个数,并执行选择的操作*/
#include <stdio.h>
char get_chioce (void);//选择部分
float chuli_fir(void);//第一个数字的处理
float chuli_sec(void);//第二个数字的处理
//char get_first(void);
float jiafa(void);//加法
float jianfa(void);//减法
float jchengfa(void);//乘法
float chufa(void);//除法
float first_n;//第一个数字
float second_n;//第二个数字

int main (void)
{
    int chioce;//选择
   
    while( (chioce = get_chioce()) != 'q')
    {
        switch(chioce)
        {
            case 'a':jiafa();
                break;
            case 'b':jianfa();
                break;
            case 'c':chengfa();
                break;
            case 'd':chufa();
                break;
        }
        
    }//endof while( (chioce = get_chioce()) != 'q')
    printf("再见!\n");
   
    return 0;
}//endof mian()


char get_chioce(void)
{
    char c;
   
    printf("请选择你的操作:\n");
    printf("a.加法\tb.减法\n");
    printf("c.乘法\td.除法\n");
    printf("q.退出\n");
   
    c = getchar();
    while( (c<'a' || c>'d') && c!='q')
    {
        printf("请输入a、b、c、d或q。\n");
        c = getchar();
        
    }
   
    return c;
}//endof get_chioec()


float chuli_fir(void)//第一个数字的处理
{
    float first_n;//第一个数字
   
    printf("请输入第一个数字:");
    while(scanf("%f", &first_n) != 1)
    {
        printf("这不是一个数字,请输入一个数字,如2.5、-1.78E8或3:");
        break;
    }
   
    return first_n;
}//endof chuli_fir()


float chuli_sec(void)//第二个数字的处理
{
    float second_n;//第二个数字
   
    printf("请输入第二个数字:");
    if(second_n=0)
    {
        printf("请输入一个非零的数:");
        scanf("%f", &second_n);
    }
    while(scanf("%f", &second_n) != 1)
    {
        printf("这不是一个数字,请输入一个数字,如2.5、-1.78E8或3:");
        break;
    }
   
    return second_n;
}//endof chuli_sec()


/*char get_first(void)
{
    int ch;

    ch = getchar();
    while(getchar() != '\n')
        continue;

    return ch;
}//endof get_first()*/

float jiafa(void)//加法
{
    chuli_fir();
    chuli_sec();
    printf("%.2f+%.2f=%.2f\n", first_n, second_n,
                            first_n+second_n);
}//endof jiafa()


float jianfa(void)//减法
{
    chuli_fir();
    chuli_sec();
    printf("%.2f-%.2f=%.2f\n", first_n, second_n,
                            first_n-second_n);
}//endof jianfa()


float chengfa(void)//乘法
{
    chuli_fir();
    chuli_sec();
    printf("%.2f*%.2f=%.2f\n", first_n, second_n,
                            first_n*second_n);
}//endof chengfa()


float chufa(void)//除法
{
    chuli_fir();
    chuli_sec();
    printf("%.2f/%.2f=%.2f\n", first_n, second_n,
                            first_n/second_n);
}//endof chufa()
这段代码现在在3个问题上卡壳了,第一个是输入的数字无法代入程序,第二个是若输入错误的选项“请输入a、b、c、d或q。”这句话会重复2遍,第三个是若输入的不是数字就会把提示都说一遍,下图展示了3个错误的地方[local]1[/local]
搜索更多相关主题的帖子: include 如何 
2014-06-22 10:00
funyh250
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:26
帖 子:290
专家分:1573
注 册:2013-12-25
收藏
得分:7 
第一个是输入的数字无法代入程序
 chioce 是什么类型
 get_chioce()返回的又是什么类型

第二个是若输入错误的选项“请输入a、b、c、d或q。”这句话会重复2遍
  要清除缓存

第三个是若输入的不是数字就会把提示都说一遍
 没有做出判断 如果第一个数字不是数字,又如果第二个不是

学习是大事   吃喝拉撒睡是小事   其他的那都不是事
2014-06-22 11:22
韶志
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:斗气大陆
等 级:贵宾
威 望:44
帖 子:2223
专家分:13592
注 册:2013-3-22
收藏
得分:7 
#include <stdio.h>
char get_chioce (void);//选择部分
float chuli_fir(void);//第一个数字的处理
float chuli_sec(void);//第二个数字的处理
//char get_first(void);
float jiafa(void);//加法
float jianfa(void);//减法
float jchengfa(void);//乘法
float chufa(void);//除法
float first_n;//第一个数字
float second_n;//第二个数字

int main (void)
{
    int chioce;//选择
   
    while( (chioce = get_chioce()) != 'q')
    {
        switch(chioce)
        {
            case 'a':jiafa();
                break;
            case 'b':jianfa();
                break;
            case 'c':chengfa();
                break;
            case 'd':chufa();
                break;
        }
        
    }//endof while( (chioce = get_chioce()) != 'q')
    printf("再见!\n");
   
    return 0;
}//endof mian()


char get_chioce(void)
{
    char c;
   
    printf("请选择你的操作:\n");
    printf("a.加法\tb.减法\n");
    printf("c.乘法\td.除法\n");
    printf("q.退出\n");
   
    c = getchar();
    fflush(stdin);   这里和下面的 fflush(stdin); 作用是清空缓冲区,否则回车键将作为字符传入,对应你的第二个问题
    while( (c<'a' || c>'d') && c!='q')
    {
        printf("请输入a、b、c、d或q。\n");
        c = getchar();
        fflush(stdin);
    }
   
    return c;
}//endof get_chioec()


float chuli_fir(void)//第一个数字的处理
{
    //float first_n;//第一个数字   这里我注释掉了,因为first_n你已经定义为全局变量了,如果在这里定义,数值将无法带入操作,也就是你的第一个问题
   
    printf("请输入第一个数字:");
    while(scanf("%f", &first_n) != 1)
    {
        printf("这不是一个数字,请输入一个数字,如2.5、-1.78E8或3:");
        break;
    }
   
    //return first_n;    不需要返回,你返回给谁啊
}//endof chuli_fir()


float chuli_sec(void)//第二个数字的处理
{
    //float second_n;//第二个数字    同上
    fflush(stdin);   这里呢对应你的第三个问题,你的意思是不是说第一个输入错误,那第二个直接提示错误无法输入?
    printf("请输入第二个数字:");
    if(second_n=0)
    {
        printf("请输入一个非零的数:");
        scanf("%f", &second_n);
    }
    while(scanf("%f", &second_n) != 1)
    {
        printf("这不是一个数字,请输入一个数字,如2.5、-1.78E8或3:");
        break;
    }
   
   // return second_n;     同上
}//endof chuli_sec()


/*char get_first(void)
{
    int ch;

    ch = getchar();
    while(getchar() != '\n')
        continue;

    return ch;
}//endof get_first()*/

float jiafa(void)//加法
{
    chuli_fir();
    chuli_sec();
    printf("%.2f+%.2f=%.2f\n", first_n, second_n,
                            first_n+second_n);
}//endof jiafa()


float jianfa(void)//减法
{
    chuli_fir();
    chuli_sec();
    printf("%.2f-%.2f=%.2f\n", first_n, second_n,
                            first_n-second_n);
}//endof jianfa()


float chengfa(void)//乘法
{
    chuli_fir();
    chuli_sec();
    printf("%.2f*%.2f=%.2f\n", first_n, second_n,
                            first_n*second_n);
}//endof chengfa()


float chufa(void)//除法
{
    chuli_fir();
    chuli_sec();
    printf("%.2f/%.2f=%.2f\n", first_n, second_n,
                            first_n/second_n);
}

三十年河东,三十年河西,莫欺少年穷!
2014-06-22 11:47
c3242404
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2014-6-22
收藏
得分:0 
谢谢了,已经解决前2个问题,第三个问题我可能没说清楚,第三个问题是若输入的不是数字,提示"这不是一个数字,请输入一个数字,如2.5、-1.78E8或3:",然后重新输入第一个数字,而不是跳过第一个直接输入第二个数字。话说这里怎么发图啊?我之前发的图没显示出来,图里展示了我所说的3个问题的运行
图片附件: 游客没有浏览图片的权限,请 登录注册
还忘了一个问题,我想选择除法后判断第二个数是否为0,若为0则重新输入第二个数,求教该怎么修改

[ 本帖最后由 c3242404 于 2014-6-22 18:51 编辑 ]
2014-06-22 18:42
longxingxiu
Rank: 2
等 级:论坛游民
帖 子:73
专家分:64
注 册:2014-4-23
收藏
得分:7 
回复 楼主 c3242404
/*显示一个菜单,提供加减乘除选项,选择后程序要求输入2个数,并执行选择的操作*/
#include <stdio.h>
char get_chioce ();//选择部分
void chuli_fir();//第一个数字的处理
void chuli_sec();//第二个数字的处理
//char get_first(void);
 void jiafa();//加法
 void jianfa();//减法
 void chengfa();//乘法
 void chufa();//除法
float first_n;//第一个数字
float second_n;//第二个数字

int main ()
{
    char chioce;   //改为char,要对应变量的类型
    chioce=get_chioce();//选择
    while( (chioce!= 'q'))
    {
        switch(chioce)
        {
            case 'a':jiafa();
                break;
            case 'b':jianfa();
                break;
            case 'c':chengfa();
                break;
            case 'd':chufa();
                break;
        }
        
    }//endof while( (chioce = get_chioce()) != 'q')
    printf("再见!\n");   
    return 0;
}//endof mian()


char get_chioce(void)
{
    char c;
   
    printf("请选择你的操作:\n");
    printf("a.加法\tb.减法\n");
    printf("c.乘法\td.除法\n");
    printf("q.退出\n");
    printf("请输入a、b、c、d或q:");

    scanf("%c", &c);
    getchar();   //作用同楼上的一样,消除缓存,记住对于字符的输入问题,容易将换行键错误的当作字符变量
    while( (c<'a' || c>'d') && c!='q')
    {
        printf("请输入有效的a、b、c、d或q:");
        scanf("%c", &c);
       getchar(); //消除缓存
    }
    return c;
}//endof get_chioec()


void chuli_fir()//第一个数字的处理
{
        
    printf("请输入第一个数字:");
    while(scanf("%f", &first_n) != 1)
    {
        printf("这不是一个数字,请输入一个数字,如2.5、-1.78E8或3:");
        break;
    }   
   
}//endof chuli_fir()


void chuli_sec()//第二个数字的处理
{   
    printf("请输入第二个数字:");
    while(scanf("%f", &second_n) != 1)
    {
        printf("这不是一个数字,请输入一个数字,如2.5、-1.78E8或3:");
    }  
}//endof chuli_sec()


/*char get_first(void)
{
    int ch;

    ch = getchar();
    while(getchar() != '\n')
        continue;

    return ch;
}//endof get_first()*/

 void jiafa()//加法
{
    chuli_fir();
    chuli_sec();
    printf("%.2f+%.2f=%.2f\n", first_n, second_n,first_n+second_n);
}//endof jiafa()


 void jianfa()//减法
{
    chuli_fir();
    chuli_sec();
    printf("%.2f-%.2f=%.2f\n", first_n, second_n,
                            first_n-second_n);
}//endof jianfa()


 void chengfa()//乘法
{
    chuli_fir();
    chuli_sec();
    printf("%.2f*%.2f=%.2f\n", first_n, second_n,
                            first_n*second_n);
}//endof chengfa()


 void chufa()//除法
{
    chuli_fir();
    chuli_sec();
    while(second_n==0){ printf("请重新输入第二个数字:");scanf("%f", &second_n);}//稍做改动
    printf("%.2f/%.2f=%.2f\n", first_n, second_n,  first_n/second_n);
}//endof chufa()

[ 本帖最后由 longxingxiu 于 2014-6-22 20:25 编辑 ]
2014-06-22 20:18
快速回复:求教,我该如何修改我的代码
数据加载中...
 
   



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

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