展开全部
之所以“没有键盘输入,就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语句容易破坏程序的可读性。能换个好编辑器就换个好的吧,带有自动缩进、变量名提示什么的会方便很多
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语句容易破坏程序的可读性。能换个好编辑器就换个好的吧,带有自动缩进、变量名提示什么的会方便很多
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询