我搞不明白这段代码(只看分if (a==1))为什么会先执行else再执行if (ch=='y' || ch=='Y')拜托各位了 3Q

#include"stdio.h"main(){a:inta,b;charch;printf("欢迎使用进制转换器,本工具能将八、十、十六进制相互转换。\n");prin... #include "stdio.h" main() { a: int a,b; char ch; printf("欢迎使用进制转换器,本工具能将八、十、十六进制相互转换。\n"); printf("请选择相应的转换器:\n"); printf("1.八进制转十进制\n"); printf("2.八进制转十六进制\n"); printf("3.十进制转八进制\n"); printf("4.十进制转十六进制\n"); printf("5.十六进制转八进制\n"); printf("6.十六进制转十进制\n"); printf("您的选择是(输入文字前的数字):"); scanf("%d",&a); if (a==1) { printf("您选择的是“八进制转十进制”,确认?(Y/N)\n"); scanf("%c",&ch); if (ch=='y' || ch=='Y') { printf("请输入您要转换的八进制数字(请在是自前加个‘0’):"); scanf("%o",&b); printf("您要转换的八进制数字为:%o,转换成十进制为:%d",b,b); } else { goto a; } } else if (a==2) { } else if (a==3) { } else if (a==4) { } else if (a==5) { } else if (a==6) { } else { } return 0; } 展开
 我来答
重初浓3782
2014-06-23 · TA获得超过116个赞
知道答主
回答量:135
采纳率:87%
帮助的人:67.7万
展开全部
楼上正解,每次scanf要习惯地用fflush(stdin)来清空输入流缓冲区,scanf有这样的特性:1.每一次scanf不会把最后一个Enter带走,2.假如输入流缓冲区有东西,它是直接取出里面的东西而不让你输入的。所以说假如你不清空输入流缓冲区的话,那么下一个scanf就会直接获取上一个scanf遗留下来的Enter字符不让你输入,(ch=='y' || ch=='Y')的条件会因为ch里面是回车符而会不成立,从而执行else里的东西,我没记错的话回车符等于13的,C语言你是自学还是老师教的,假如是老师教的上面我说得细节应该会提及到的。。。
记得采纳啊
斩頌狃扦漳偨艚
2014-06-23 · TA获得超过128个赞
知道答主
回答量:112
采纳率:0%
帮助的人:116万
展开全部
因为你输入1之后后面有个回车,所以这个回车就被扫描到ch里了,直接跳到else。 我将你if(a==1)部分代码改了下,用循环判断只有y和n才能跳转: if (a==1) { printf("您选择的是“八进制转十进制”,确认?(Y/N)\n"); scanf("%c",&ch); ch = tolower(ch); /* 转换成小写好判断 */ while( ch != 'y' && ch != 'n' ) { /* 如果不是y或者n,就一直要求输入 */ scanf("%c", &ch); ch = tolower(ch); /* 转换成小写好判断 */ } if (ch=='y' ) /* 只需要判断小写的y */ { printf("请输入您要转换的八进制数字(请在是自前加个‘0’):"); scanf("%o",&b); printf("您要转换的八进制数字为:%o,转换成十进制为:%d",b,b); } else { goto aa; } }
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式