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吧?为什么后面的只需要输入一次就可以了?
一年多之前 回复
Zindow
Zindow 我复制粘贴了楼主的代码,我这边是从第二次开始输入q的话只需要输入一次q回车就会跳出bye,打了个断点显示scanf只读入了一个数据
一年多之前 回复
ai977313677
ai977313677   2017.01.05 19:59

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

zuoside__lord
zuoside__lord 嗯,只能如此啦
一年多之前 回复
ai977313677
ai977313677 应该可以在这里面改,while里面只scanf switch的判断条件,然后进入循环后再scanf m1,m2,也没有提示信息,可以满足要求。
一年多之前 回复
qq_37146456
qq_37146456 我知道,那个我试过但是不符合题目要求,这个代码注定不能用switch么,,,,,,,唉,
一年多之前 回复
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我就不写了,你应该
一年多之前 回复
qq_37146456
qq_37146456 试试去
一年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
JZOJ 初中 2184:羊羊列队
时间限制: 1000 ms 空间限制: 262144 KB 具体限制 题目描述在修建完新路后,小羊们总算可以安心入学了。今年是羊年,新入学的小羊特别多。老师们打算将N只小羊分成M个班级,每个班至少有1只羊。 如何分班成了老师们最头疼的事情,因为开学典礼上,村长就要看到小羊们列队的情况。每个班的小羊都排成一排,站在草场上。村长希望队列中羊的高度尽可能整齐,村长对队列的不整齐度有自己的要求。 例如
按如下函数原型用函数编程解决如下的日期转换问题(要求考虑闰年的问题): 输入某年某月某日,计算并输出它是这一年的第几天。 /* 函数功能: 对给定的某年某月某日,计算它是这一年的第几天 函数参数:
#include <stdio.h>int  DayofYear(int year, int month, int day){    int s=0,i,a[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; if(year%4==0&&year%100!=0||year%400==0)  a[2]=29; for(i=1;i&lt...
个人要求如下
技术角度:1年以上JAVA、C、C++、C#等编程经验 (windows、linux、unix环境)。 掌握SYBASE、 DB2、 SQL-SERVER等主流数据 。较强的学习和沟通能力,具创新精神。其他:英语交际能力
oj1967: C/C++经典程序训练5---图形打印问题
问题描述:图形的规则如下 ,要求输入n的值,按照图形的打印规则打印出相关的图形        +                            +*+                +      +***+              +*+     +*****+            +***+          +    +*******+(n=5)     +***
hdu 5969 最大的位或【贪心】
最大的位或 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 126    Accepted Submission(s): 67 Problem Description B君和G君聊天的时候想到了如下的问题。 给定自然数l
HDU 最大的位或
最大的位或Problem DescriptionB君和G君聊天的时候想到了如下的问题。给定自然数l和r ,选取2个整数x,y满足l <= x <= y <= r ,使得x|y最大。其中|表示按位或,即C、 C++、 Java中的|运算。 Input包含至多10001组测试数据。第一行有一个正整数,表示数据的组数。接下来每一行表示一组数据,包含两个整数l,r。保证 0 <= ...
一些比较有意思的问题,大家思考一下吧!
 【1】假设有一个池塘,里面有无穷多的水。现有2个空水壶,容积分别为5升和6升。问题是如何只用这2个水壶从池塘里取得3升的水。 【2】周雯的妈妈是豫林水泥厂的化验员。 一天,周雯来到化验室做作业。做完后想出去玩。 "等等,妈妈还要考你一个题目,"她接着说,"你看这6只做化验用的玻璃杯,前面3只盛满了水,后面3只是空的。你 能只移动1只玻璃杯,就便盛满水的杯子和空杯子间隔起来 吗?" 爱动脑筋的
并行编程之volatile变量
并行编程之volatile变量在并行编程中,volatile变量算是一个最轻量级的同步规则了。volatile具有以下两种特性 保证变量的可见性 可见性是指当一个线程修改了共享变量的值,其它线程能够立即得知这个修改。Java内存模型是通过在变量修改后将新值同步回主内存,在变量读取前从主内存刷新变量值这种依赖主内存作为传递媒介的方式来实现可见性,无论是普通变量还是volatile变量都是如此,普通
hdu 5969 最大的位或 贪心
Problem Description B君和G君聊天的时候想到了如下的问题。 给定自然数l和r ,选取2个整数x,y满足l 其中|表示按位或,即C、 C++、 Java中的|运算。   Input 包含至多10001组测试数据。 第一行有一个正整数,表示数据的组数。 接下来每一行表示一组数据,包含两个整数l,r。 保证 0 1018。   Output 对于每组
C/C++经典程序训练5---图形打印问题
Problem Description 图形的规则如下 ,要求输入n的值,按照图形的打印规则打印出相关的图形: Input 输入整数n。 Output 按图形的规律打印出相关的图形。 Example Input 4 Example Output + +*+ +***+ +*****+ +***+ +*+ + #include