2 qq 37146456 qq_37146456 于 2017.01.05 19:40 提问

想回答问题的大神们请看清楚问题和我的要求!,题目如下,代码如下,又总算修改不对总算比题意多一点输入

问题 Q: 四则运算
题目描述
编写一个程序,为您提供加法、减法、乘法或除法的选项。获得您的选择后,该程序请求两个数,然后执行您选择的操作。该程序应该只接受它所提供的菜单选项。

a表示加法,s表示减法,m表示乘法,d表示除法,q表示结束这个时候应该输出Bye.

输入
一个字符(a,s,m,d,q),随后两行两个数,

输入为q时结束输入。

输出
输出操作算式并求出结果(注意空格,保留两位小数)。

如果为q输出Bye!

样例输入
a
3
4
q
样例输出
3.00 + 4.00 = 7.00
Bye!

代码:
#include
int main()
{
char o,s,m,d,q;
float m1,n,sum;
while(scanf("%c\n%f\n%f",&o,&m1,&n)!=EOF)

{

    switch(o)

    {
    case'a':
        printf("%.2f+%.2f=%.2f\n",m1,n,m1+n);
        break;

    case's':

        printf("%.2f-%.2f=%.2f\n",m1,n,m1-n);
        break;

    case'm':

        printf("%.2f*%.2f=%.2f\n",m1,n,m1*n);
        break;
    case'd':

        printf("%.2f/%.2f=%.2f\n",m1,n,m1/n);
        break;

    case'q':
        printf("Bye!");
        break;
    }



}

}

我每次需要输入两次q才会出现Bye,而且结束不了,
请用c语言在原代码上修改,请看题看题,每次认真看题的人简直少得可怜

4个回答

zjn640322
zjn640322   2017.01.06 09:35

while(scanf("%c\n%f\n%f",&o,&m1,&n)!=EOF)是连续输入三个数据,你输入两次有结果输出,第一次你输入了三个数,正常,因为你输入的都满足要求,故程序可继续往下走,当你输入q的时候代码有在执行scanf语句,第一q输入满足%c所以程序继续执行,等待第二个输入,当你输入第二个q时,不满足%f的格式,scanf错误,退出了录入,执行了下面的代码,输出了bye,你明白吗

Zindow
Zindow 按照这个意思的话,后来的输入应该也是要输入两次q才会跳出bye吧?为什么后面的只需要输入一次就可以了?
11 个月之前 回复
Zindow
Zindow 我复制粘贴了楼主的代码,我这边是从第二次开始输入q的话只需要输入一次q回车就会跳出bye,打了个断点显示scanf只读入了一个数据
11 个月之前 回复
ai977313677
ai977313677   2017.01.05 19:59

不用输两次q,输一次q,任意两个数字应该也能出现bye。
原因应该在while里面。

zuoside__lord
zuoside__lord 嗯,只能如此啦
12 个月之前 回复
ai977313677
ai977313677 应该可以在这里面改,while里面只scanf switch的判断条件,然后进入循环后再scanf m1,m2,也没有提示信息,可以满足要求。
12 个月之前 回复
qq_37146456
qq_37146456 我知道,那个我试过但是不符合题目要求,这个代码注定不能用switch么,,,,,,,唉,
12 个月之前 回复
qq_37146456
qq_37146456   2017.01.05 20:02

我知道,那个我试过但是不符合题目要求,这个代码注定不能用switch么,,,,,,,唉,

Fate_Dream
Fate_Dream   2017.01.05 21:07

#include

int main()
{
char o,a,s,m,d,,q;
float m1.m2;
while(1)
{
scanf("%f %f %c",&m1,&m2,&o);
switch(o)
{
case 'a':
// printf("");

break;
case 's':
// printf("");

break;
case 'm':
// printf("");

break;
case 'd':
// printf("");

break;
case 'q:
// printf("");

break;
default:
break;
}
printf("是否继续?\n");
scanf("%c",&o);
if(o!='y')
break;
}

return 0;

}



Fate_Dream
Fate_Dream 回复qq_37146456: 你写的while判断条件不规范,尽量使while判断条件简明易懂,后面的printf我就不写了,你应该
11 个月之前 回复
qq_37146456
qq_37146456 试试去
12 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!