用C语言设计一个计算器,处理简单的加减乘除,最后用goto返回执行下一个计算。

为什么没有键盘输入,自动就跳回去了。... 为什么没有键盘输入,自动就跳回去了。 展开
 我来答
红颜不求得
2017-05-11 · TA获得超过773个赞
知道小有建树答主
回答量:367
采纳率:100%
帮助的人:221万
展开全部
之所以“没有键盘输入,就goto回去了”是因为在

scanf("%lf%c%lf",&a,&c,&b)时,你键入的不仅仅是9*9,还有一个“看不见的ENTER字符”,这个“看不见的ENTER字符”没有被scanf取走,留在了“缓冲区”内。

等过了switch语句,到了scanf("%c",&d)时,这个“看不见的ENTER字符”被scanf读取并存入了变量d中,所以“没有键盘输入”却执行了scanf("%c",&d)

为什么d是“ENTER字符”却依然会goto回去呢?是因为你的判断语句写错了!

if(d=="y" || "Y")的意思是“如果d=="y"或者"Y"",现在d=="ENTER",那么程序就去判断"Y","Y"是一个只有一个字符Y的字符串,其起始值不是0,所以判断为true,if的条件成立!

if(d=="y" || "Y")应该改成if(d=='y' || d=='y')

要想解决”看不见的ENTER字符“问题,可以利用语句:
while(getchar()!='\n');
将这个语句放在scanf("%lf%c%lf",&a,&c,&b)的后面。这条语句我就不做分析了,自己琢磨琢磨。

最后,写程序请注意格式,没有任何缩进在简单程序中可行,但以后写一些复杂的多层嵌套的程序你就会找不到北(哪个括号和哪个括号匹配?)。而且goto语句也别再用了,你这个goto语句明显可以通过一个循环结构替代,也没见过哪个goto语句是不能被其他结构替代的。goto语句容易破坏程序的可读性。能换个好编辑器就换个好的吧,带有自动缩进、变量名提示什么的会方便很多
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式