哪位C语言高手帮我看下题目是: 写一个简单的计算机器,做二元运算 - * /和%运算,我所编写的代码如下

[复制链接]
查看11 | 回复6 | 2011-8-19 07:19:47 | 显示全部楼层 |阅读模式
哪位C语言高手帮我看下题目是:写一个简单的计算机器,做二元运算-*/和%运算,运算完成后可以让用户选择输入y或者Y,以重复执行前面的运算,输入N或者n结束程序我所编写的代码如下:#includestdio.hintmain(void){doublenumber1=0.0;doublenumber2=0.0;charoperation=0;charanswer=0;there:printf(\"\\nPleaseinputthejisuanshuju:\\n\");scanf(\"%lf%c%lf\",switch(operation){case\'\':printf(\"=%lf\\n\",number1number2);break;case\'-\':printf(\"=%lf\\n\",number1-number2);break;case\'*\':printf(\"=%lf\\n\",number1*number2);break;case\'/\':if(number2==0)printf(\"\\n\\nbeichushubunengwei0!\\n\");elseprintf(\"=%lf\\n\",number1/number2);break;case\'%\':if((long)number2==0)printf(\"\\n\\nbeichushubunengwei0!\\n\");elseprintf(\"=%ld\\n\",(long)number1%(long)number2);break;default:printf(\"\\n\\ninvalidshuju!\\n\");printf(\"\\n\\nPleaseinputtheshujuonceagain:\\n\");}printf(\"\\nwewillcontinuetotheprograme,pressYyorNn:\");scanf(\"%c\",if(answer==\'Y\'||answer==\'y\')gotothere;elseif(answer==\'N\'||answer==\'n\')printf(\"wewillendtheprograme\");return0;}这行代码编译可以通过并生成EXE文件,但是运行的时候并没有按照我原先的意图运行起来,请问代码到底在哪里出了问题
回复

使用道具 举报

千问 | 2011-8-19 07:19:47 | 显示全部楼层
Pleaseinputthejisuanshuju:12=3.000000wewillcontinuetotheprograme,pressYyorNn:yPleaseinputthejisuanshuju:23=5.000000wewillcontinuetotheprograme,pressYyorNn:nwewillendtheprogramePressanykeytocontinueprintf(\"\\nwewillcontinuetotheprograme,pressYyorNn:\");getchar();加个getchar();scanf(\"%c\",
回复

使用道具 举报

千问 | 2011-8-19 07:19:47 | 显示全部楼层
在“scanf(\"%c\",“之前加入一行fflush(stdin);清空输入缓存流。
回复

使用道具 举报

千问 | 2011-8-19 07:19:47 | 显示全部楼层
#includestdio.hintmain(void){doublenumber1=0.0;doublenumber2=0.0;charoperation=0;charanswer=0;while(1){printf(\"\\nPleaseinputthejisuanshuju:\\n\");scanf(\"%lf%c%lf\",switch(operation){case\'\':printf(\"=%lf\\n\",number1number2);break;case\'-\':printf(\"=%lf\\n\",number1-number2);break;case\'*\':printf(\"=%lf\\n\",number1*number2);break;case\'/\':if(number2==0)printf(\"\\n\\nbeichushubunengwei0!\\n\");elseprintf(\"=%lf\\n\",number1/number2);break;case\'%\':if((long)number2==0)printf(\"\\n\\nbeichushubunengwei0!\\n\");elseprintf(\"=%ld\\n\",(long)number1%(long)number2);break;default:printf(\"\\n\\ninvalidshuju!\\n\");printf(\"\\n\\nPleaseinputtheshujuonceagain:\\n\");}printf(\"\\nwewillcontinuetotheprograme,pressYyorNn:\");//fflush(stdin);和下面的getchar()功能一样getchar();scanf(\"%c\",if(answer==\'Y\'||answer==\'y\')continue;elseif(answer==\'N\'||answer==\'n\'){printf(\"wewillendtheprograme\");break;}}return0;}
回复

使用道具 举报

千问 | 2011-8-19 07:19:47 | 显示全部楼层
把这句代码:scanf(\"%c\",写两遍。问题就解决了。因为第一遍自动读入了“\\n”程序就自动退出了。执行代码第二遍时,才能读入你输入的y/n指令;
回复

使用道具 举报

千问 | 2011-8-19 07:19:47 | 显示全部楼层
这个问题是大家经常忽略的一个问题,你的程序目前出现的现象是运算执行了一次之后在打印出wewillcontinuetotheprograme,pressYyorNn之后就停止了,也没有给出任何的提示,也就是answer没有输入正确,那么我们想想,在你输入了数据如:11之后,我们是不是要输入一个“回车”,这个回车并没有有任何的变量接收它,那再这个时候你来一句scanf(\"%c\",自然这时的answer就存入和“回车”这个字符,所以即不是Y也不是N,也就不会有任何的提示,程序就直接终止了,要解决这个问题很简单,我们只需要在scanf(\"%c\",前面加上一句getchar();就可以了。这个getchar();就是专门用来接收“回车”这个字符的。
回复

使用道具 举报

千问 | 2011-8-19 07:19:47 | 显示全部楼层
你好,我也是软件编程初学者,我按照你的意思编了代码,并且可以运行,你可以试试#includestdio.h#includeconio.hvoidmain(){inta,b;//定义两个整形变量,a,b是用户输入的数字,可以不赋值charc,d;//定义两个字符,c是运算符,可以不赋值for(intn=1;;n)//使用循环{printf(\"请输入一个简单的四则运算算式:\");scanf(\"%d%c%d\",switch(c){case\'\':printf(\"%d%d=%d\\n\",a,b,ab);break;case\'-\':printf(\"%d-%d=%d\\n\",a,b,a-b);break;case\'*\':printf(\"%d*%d=%d\\n\",a,b,a*b);break;case\'/\':printf(\"%d/%d=%d\\n\",a,b,a/b);break;case\'%\':printf(\"%d/%d的余数是:%d\\n\",a,b,a%d);break;;}for(inti;;i){printf(\"是否继续?\");scanf(\"%c\",if(d==\'y\'||d==\'Y\')break;elseif(d==\'n\'||d==\'N\')break;elseprintf(\"输入有误!\\n\");}if(d==\'n\'||d==\'N\')break;}getchar();}你可以看看与你的代码有哪些区别。我qq:295853085,需要的话可以交流交流。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行