大家好,请看一下这段程序,我输入B33<回车>,可是用dev c++运行出来的结果却是-65 B,这与预期不符,我认为应该是1 B.
#include <stdio.h>
int main()
{
char a,b;
a=getchar();
scanf("%d", &b);
a = a - 'A';
b = b * 2 ;
printf("%d %c\n",a,b);
return 0;
}
请问这是什么情况啊,然后我就尝试在visual c种运行,结果与预期相符。
然后我就在dev c++里改程序,1、将scanf那句话和getchar那句话互换,输入33B结果也符合预期,2、将上面三行改成这样,char b,a; scanf("%c",&a); scanf("%d",&b)输入B33就对了。
scanf("%d", &b);
%d
需要一个int*
,你给了它一个char*
,说这个就是int*
。你欺骗了编译器,那么编译的结果就不一定会是啥了。这个叫未定义行为,理论上出现任何结果都是可能的。