用dev c++运行C程序,运行结果为啥是这样?

大家好,请看一下这段程序,我输入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就对了。

阅读 1.6k
1 个回答

scanf("%d", &b);

%d 需要一个 int* ,你给了它一个 char* ,说这个就是 int*。你欺骗了编译器,那么编译的结果就不一定会是啥了。


这个叫未定义行为,理论上出现任何结果都是可能的。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进