关于C中scanf函数的%c解释符的探究
2015-12-17 21:56
369 查看
发现了一个细节上的问题,一道课本上的题目,代码如下:
输入123<回车>456<回车>,会输出什么?
刚看到题很懵。。。。。。尼玛往scanf的%c里输入数字你蛋疼么。。。。。。
所以感觉答案应该是%c并不接受数字输入,程序应该不会有输出,继续提示输入。
然而我错了,因为我测试之后程序输出了456123。。。。。。。。。
为啥啊?????不能理解啊!!!!!!
然后用vs在程序结束后看了一下变量(原谅我不会用断点),我的内心是崩溃的。。。。。
上图:
![](http://img.blog.csdn.net/20151217220840106?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
(MD居然有水印!)
好的问题解开了,scanf的%c不但接受了输入而且把数字解释成了字符赋给了变量。
说明时间:scanf的%c接受从键盘的任何一个输入,甚至包括回车和空格,并把他们解释成一个字符,即'(char)',(这玩意比getchar()还要牛逼。。。)
又是一个天杀的细节问题。。。。。。。。
#include<stdio.h> #include<stdlib.h> int main(void) { char a, b, c; int d; scanf("%c%c%c%d", &a, &b, &c, &d); printf("%d%c%c%c", d, a, b, c); system("pause"); return 0; }
(stdlib.h和system函数是我自己添的,本来没有)题目如下:
输入123<回车>456<回车>,会输出什么?
刚看到题很懵。。。。。。尼玛往scanf的%c里输入数字你蛋疼么。。。。。。
所以感觉答案应该是%c并不接受数字输入,程序应该不会有输出,继续提示输入。
然而我错了,因为我测试之后程序输出了456123。。。。。。。。。
为啥啊?????不能理解啊!!!!!!
然后用vs在程序结束后看了一下变量(原谅我不会用断点),我的内心是崩溃的。。。。。
上图:
(MD居然有水印!)
好的问题解开了,scanf的%c不但接受了输入而且把数字解释成了字符赋给了变量。
说明时间:scanf的%c接受从键盘的任何一个输入,甚至包括回车和空格,并把他们解释成一个字符,即'(char)',(这玩意比getchar()还要牛逼。。。)
又是一个天杀的细节问题。。。。。。。。