最小白的小白 2020-02-29 20:02 采纳率: 100%
浏览 525
已采纳

C Primer Plus 8.8练习题 编写一个菜单,提供加减乘除的选项进行计算

编写一个程序,显示提供加法、减法、乘法的菜单,该程序只接受菜单提供的选项,程序提示用户输入两个数字。要求是输入q退出,输入数字时有误要求重新输入,除数为零的时候报错并要求重新输入。
我的程序在正常运算时没问题,输入q退出和除数为0时程序有问题。可能是那个循环和if有问题但是不知道具体问题在哪里。
我只是个自学一个月小白求大佬带带我!!!
#include
int main()
{
float x,y,z;
char ch;
while(ch!='q')
{
printf("输入你的选项\n");
printf("a.加 b.减\nc.乘 d.除\nq.退出\n");
scanf(" %c",&ch);
if(ch!='a'&&ch!='b'&&ch!='c'&&ch!='d'&&ch!='q')
{
printf("输入选项无效重新输入\n");
continue;
}
printf("输入第一个数:");
while((scanf(" %f",&x))==0)
{
printf("这个不是数,重新输入\n");
}
printf("输入第二个数:");
while ((scanf(" %f",&y))==0)
{
printf("这个不是数,重新输入\n");
if(ch=='d'&&y==0)
{
printf("0不能作为除数请重新输入");
continue;
}
}
switch(ch)
{
case 'a':
z=x+y;
break;
case 'b':
z=x-y;
break;
case 'c':
z=x*y;
break;
case 'd':
z=x/y;
break;
case 'q':
break;
}
printf("\n结果是%.2f\n",z);
if(ch=='q')
break;
}
return 0;
}

  • 写回答

1条回答 默认 最新

  • threenewbee 2020-02-29 21:29
    关注

    问题解决的话,请点下采纳

    #include <stdio.h>
    
    int main()
    {
        float x,y,z;
        char ch;
        while(1)
        {
            printf("输入你的选项\n");
            printf("a.加 b.减\nc.乘 d.除\nq.退出\n");
            scanf(" %c",&ch);
            if(ch!='a'&&ch!='b'&&ch!='c'&&ch!='d'&&ch!='q')
            {
                printf("输入选项无效重新输入\n");
                continue;
            }
            if (ch == 'q') break;
            printf("输入第一个数:");
            while((scanf("%f",&x))==0)
            {
                printf("这个不是数,重新输入\n");
            } 
            printf("输入第二个数:");
            while (1)
            {
                if (scanf("%f",&y)==0)
                    printf("这个不是数,重新输入\n");
                else if(y==0)
                {
                    printf("0不能作为除数请重新输入");
                }
                else
                    break;
            }
            switch(ch)
            {
            case 'a':
                z=x+y;
                break;
            case 'b':
                z=x-y;
                break;
            case 'c':
                z=x*y;
                break;
            case 'd':
                z=x/y;
                break;
            }
            printf("\n结果是%.2f\n",z);
        }
        return 0;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 DIFY API Endpoint 问题。
  • ¥20 sub地址DHCP问题
  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突