0%

一个神奇的c语言程序

更新:问题已解决,详见一个神奇的C语言程序 - 知乎 (zhihu.com)评论区大佬。(果然还是太菜了……

写代码时为了节省空间,就是用了uint8_t,然后发现一个很神奇的现象,程序很简单,但是现象很神奇:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include<cstdio>
#include<cstdint>

int main()
{
uint8_t a = 123, b;

// scanf("%d", &a);
scanf("%d %d", &a, &b);

printf("%d, %d", a, b);

return 0;
}

输入:

1
1 15

输出:

1
0, 15

可以看到,对于变量a,不仅没有成功输入,并且初始化的123也没了。

很神奇。。。

同时,如果只输入一个a,是可以正常读入到a中的,读入a和b就不行,即使用两个scanf分开来读。

个人猜测与uint8_t这个类型本身其实是unsigned char类型,以及scanf的%d读入有关(但是感觉用%d读入char型也没毛病呀。。。毕竟单独输入a就可以正常读入。

暂时做一个记录,以后有时间深入研究。

如果有大佬知道是什么原理,请在评论留言!