| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 490 人关注过本帖
标题:请求帮助,一道练习题!
只看楼主 加入收藏
迷途的菜鸟
Rank: 2
等 级:论坛游民
帖 子:36
专家分:50
注 册:2012-3-20
结帖率:83.33%
收藏
已结贴  问题点数:20 回复次数:3 
请求帮助,一道练习题!
c primer plus第5版 8-8的一个练习
8.编写一个程序,显示一个菜单,为您提供加法、减法、乘法或除法的选项。获得您的选择后,该程序请求两个数,然后执行您选择的操作。该程序应该只接受它所提供的菜单选项。它应该使用float类型的数,并且如果用户未能输入数字应允许其重新输入。在除法的情况中,如果用户输入O作为第二个数,该程序应该提示用户输入一个新的值。一个典型的程序运行应该如下所示:我实现除法输入第二个数的时候,有问题!其他的似乎还比较正常!各位帮我看看吧。谢谢了!


Enter the operation of your choice:
a. add       s. subtract
m. multiply   d. divide
q. quic
Enter first number: 22.4
Enter second number: one
one is not an number.
Please enter a number, such as 2.5. -1.78E8, or 3. 1
22.4 + 1 = 23.4
Enter the operation of your choice:
a. add        s. subtract
m. multiply   d. divide
q. quit
Enter first number: 18.4
Enter second number: O
Enter a number other than 0: 0.2 //我实现除法输入第二个数的时候,有问题!其他的似乎还比较正常!各位帮我看看吧。谢谢了!


18.4 / 0.2 = 92
Enter the operation of your choice:
a. add        s. subtract
m. multiply   d. divide
q. quit
q
Bye.
程序代码:
#include <STDIO.H>
#include <CTYPE.H>

void menu(void);
void add(void);
void substract(void);
void multiply(void);
void divide(void);
char get_choice(void);
char get_first(void);
float get_float(void);

int main(void)
{
    int choice;
   
    while ((choice = get_choice()) != 'q')
    {
        switch (choice)
        {
        case 'a': add();
            break;
        case 's': substract();
            break;
        case 'm': multiply();
            break;
        case 'd': divide();
            break;
        default : puts("error");
            break;
        }
    }
    puts("Bye");
    return 0;
}

void menu(void)
{
    puts("Enter the operation of your choice:");
    printf("a. add       s. subtract\n");
    printf("m. multiply  d. divide\n");
    puts("q. quit");
}
void add(void)
{
    float firstnumber, secondnumber;
    

    puts("Enter first number:");
   
    firstnumber = get_float();
    puts("Enter second number:");

    secondnumber = get_float();


    printf("%.1f + %.1f = %.1f\n", firstnumber, secondnumber, firstnumber + secondnumber);
}
void substract(void)
{
    float firstnumber, secondnumber;


    puts("Enter first number:");

    firstnumber = get_float();
    puts("Enter second number:");

    secondnumber = get_float();
   
   
    printf("%.1f - %.1f = %.1f\n", firstnumber, secondnumber, firstnumber - secondnumber);
}
void multiply(void)
{
    float firstnumber, secondnumber;


    puts("Enter first number:");

    firstnumber = get_float();
    puts("Enter second number:");
   
    secondnumber = get_float();
    

    printf("%.1f * %.1f = %.1f\n", firstnumber, secondnumber, firstnumber * secondnumber);
}
void divide(void)
{
    float firstnumber, secondnumber;
    int ch;

    puts("Enter first number:");

    firstnumber = get_float();
    puts("Enter second number:");

    secondnumber = get_float();
    while((secondnumber = get_float()) == 0)
    {
        do
        {
            ch = getchar();
        } while (isspace(ch));
        puts("Enter a number more than 0:");
        continue;
    }
    

    

    printf("%.1f / %.1f = %.1f\n", firstnumber, secondnumber, firstnumber / secondnumber);
}
char get_choice(void)
{
    int ch;
   
    menu();
    ch = get_first();
    //while (  (ch < 'a' || ch > 's') && ch != 'q')
    while(ch != 'a' && ch != 's' && ch != 'm' && ch != 'd' && ch != 'q') 
    {
        printf("Please respond with a, d, s, m, or q.\n");
        ch = get_first();
    }
   
    return ch;
}
char get_first(void)
{
    int ch;
   
   
    do
    {
        ch = getchar();
    } while (isspace(ch));
    while (getchar() != '\n')
        continue;
   
    return ch;
}
float get_float(void)
{
    int ch;
    float float_num;
   
    while(scanf("%f", &float_num) != 1)
    {
        while((ch = getchar()) != '\n')  
            putchar(ch);  
        printf("is not an number.\n");  
        printf("enter a number,such as 2.5,-1.78E8 or 3:");
    }
    return float_num;
}
我实现除法输入第二个数的时候,有问题!其他的似乎还比较正常!各位帮我看看吧。谢谢了!



[ 本帖最后由 迷途的菜鸟 于 2012-8-17 14:06 编辑 ]
搜索更多相关主题的帖子: Enter 练习题 operation 
2012-08-17 14:04
tracyclean
Rank: 2
来 自:浙江大学
等 级:论坛游民
帖 子:4
专家分:30
注 册:2012-3-25
收藏
得分:20 
程序代码:
void divide(void)
{
    float firstnumber, secondnumber;
    int ch;

    puts("Enter first number:");

    firstnumber = get_float();
    puts("Enter second number:");

    //secondnumber = get_float();
    while((secondnumber = get_float()) == 0)
   // {
  //      do
   //     {
   //         ch = getchar();
    //    } while (isspace(ch));
        puts("Enter a number more than 0:");
     //   continue;
  //  }
    

    

    printf("%.1f / %.1f = %.1f\n", firstnumber, secondnumber, firstnumber / secondnumber);
}
除法部分的修改

倚天照海花无数,高山流水心自知
2012-08-17 14:29
迷途的菜鸟
Rank: 2
等 级:论坛游民
帖 子:36
专家分:50
注 册:2012-3-20
收藏
得分:0 
以下是引用tracyclean在2012-8-17 14:29:39的发言:

void divide(void)
{
    float firstnumber, secondnumber;
    int ch;
 
    puts("Enter first number:");
 
    firstnumber = get_float();
    puts("Enter second number:");
 
    //secondnumber = get_float();
    while((secondnumber = get_float()) == 0)
   // {
  //      do
   //     {
   //         ch = getchar();
    //    } while (isspace(ch));
        puts("Enter a number more than 0:");
     //   continue;
  //  }
     
 
     
 
    printf("%.1f / %.1f = %.1f\n", firstnumber, secondnumber, firstnumber / secondnumber);
}除法部分的修改
多谢啦!哈哈
2012-08-17 17:54
houbincarson
Rank: 2
等 级:论坛游民
帖 子:24
专家分:45
注 册:2011-5-17
收藏
得分:0 
我靠,2楼不能加个判断?如果你输入的secondnumber=0呢,不会报错?加一个判断语句if else语句
请留意程序的健壮性!

2012-08-19 09:38
快速回复:请求帮助,一道练习题!
数据加载中...
 
   



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

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