我是新手,刚学C语言,昨天在Visual Studio 2013上做了个课后练习题,出现了一个很奇葩的问题.

代码和执行效果如下两图.问题是:第二个scanf("%c",&subject);这个无法执行输入.直接跳过第二个输入项,进入第三个输入项.请问此代码错误在哪?... 代码和执行效果如下两图.
问题是:第二个scanf("%c",&subject);这个无法执行输入.直接跳过第二个输入项,进入第三个输入项.请问此代码错误在哪?
展开
 我来答
拥云庄主
2013-06-17 · TA获得超过2505个赞
知道小有建树答主
回答量:672
采纳率:100%
帮助的人:454万
展开全部

键盘上的回车其实包含两个字符:\r\n,你输入A之后回车,scanf从输入缓冲区读入数据,

college为A,subject的值为\n,所以,跳过了第二个输入语句,直接到第三个输入语句了。

你可以在执行完之后把subject的值打出来,可以看到,它的ascii码值为10,就是'\n'。

要修改这个问题的话,读入你想要的数据之后清空缓冲区就行了。

在scanf后面加上:

fflush(stdin);

看我的测试代码:

更多追问追答
追问
果然可以用了!!!谢谢!!!
不过我想追加10分再问个问题.
我下面那些if语句是不是有问题?我是按照书上输入的,但是不管我选项是什么,最后结果都是"congratulations! you got an interview!!!"
也就是不管怎么样interview都是true...
这是为什么呢?
追答
你最后那个判断,把=当==用了,所以相当于给interview赋值为true再判断,那条件肯定都成立啊。
注意不要把=和==混用,=是赋值号,判断相等要用==号。
另外有种避免的方法是把常量写在前面,比如:
if(true==interview)....
这样如果你误把==写成=,编译的时候就会报错。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式