今天在论坛上看有laphon同学的一个问题,觉得这个问题很有意思。
原帖地址
问题援引如下:
做一个小程序的时候发现的。代码如下,使用的编译器为DEV-C++ 4.9.9.2。
如果先要求输入a,再要求输入b,那么a的值无论输入多少(少于255)输出都会是0;
反过来,如果先要求输入b,再要求输入a,那么就会正常。
这是为什么呢?请教达人解释。#include #include int main(int argc,char **argv) { unsigned char a,b; scanf("%d",&a); scanf("%d",&b); printf("a=%d,b=%dn",a,b); scanf("%d",&b); scanf("%d",&a); printf("a=%d,b=%dn",a,b); system("pause"); }
devcpp用的是gcc编译器,自己用gcc试了一下,果然是这样。为什么出现这种问题呢?开gdb调试,信息如下:
main (argc=1, argv=0xbfbaf3e4) at a.c:7
7 scanf("%d",&a);
(gdb) n
1
8 scanf("%d",&b);
(gdb) p a
$1 = 1 '