使用%d
说明符将字符传递给scanf会导致随机数大约为32,760。我正在使用Ubuntu 16.04提供的GCC。
我的猜测很明显,这是未指明的行为。但是有什么想法可以在幕后发生什么?
以上是上述目标的相当明显的代码:
#include <stdio.h>
void main() {
int n;
scanf("%d", &n);
printf("\n%d", n);
}
提供的输入重复字母'a'
,然后按Enter键终止终端通话。前三次运行的结果是:32765,32764,32767。
为了回应一些有用的建议,我因此认为scanf没有初始化n。但它确实某事。 请考虑以下代码:
#include<stdio.h>
int main() {
int i;
for(i=0; i<10; i++)
{
int n;
printf("%d", n);
}
}
这为输出提供了一行十个零。 我茫然不知所措。问题可能并不重要,我明白了。但我不能不停地想知道为什么。由于这个原因,我仍然无法排除scanf的影响。
答案 0 :(得分:0)
我将您的计划更改为
#include <stdio.h>
int main() {
int n;
printf("%d\n", n);
scanf("%d", &n);
printf("%d\n", n);
}
当我使用输入&#34; a&#34;运行它时,它会打印
32767
32767
所以无论是什么导致n
开始使用32767的位模式,都不是 scanf
正在做的任何事情。
在某种程度上,这很有意思,甚至可能很有趣:尽管事实上我使用了一个非常不同的系统(在MacOS 10.9.5下铿锵600.0.57),我得到了一个非常相似的结果。但无论多么有趣,我都不会浪费时间去弄清楚原因,因为它很难,而且它也不会教会我编写正确程序的任何有用的东西。它只是一些随意的,毫无意义的巧合。