用C语言设计一个计算器,处理简单的加减乘除,最后用goto返回执行下...
发布网友
发布时间:2024-03-09 06:32
我来回答
共1个回答
热心网友
时间:2024-07-21 22:42
之所以“没有键盘输入,就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语句容易破坏程序的可读性。能换个好编辑器就换个好的吧,带有自动缩进、变量名提示什么的会方便很多