您的位置:首页 > 编程语言 > C语言/C++

关于C中scanf函数的%c解释符的探究

2015-12-17 21:56 369 查看
发现了一个细节上的问题,一道课本上的题目,代码如下:

#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()还要牛逼。。。)

又是一个天杀的细节问题。。。。。。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C语言学习