【发布时间】:2012-06-29 18:53:12
【问题描述】:
int x;
scanf("%d",&x);
printf("%d",x);
Input: . (just a period)
Output: 4096
这里为什么输出4096。这就是我的想法:所以一个句点的 ASCII 值是 46。在输入时,它读入 x 作为 46 的位模式?而当它打印的时候,是不是在x的内存位置打印出四个字节,所以只有第一个字节填充了46对应的位模式,其余的都是组成4096的随机东西?但这是不正确的,因为看看我这样做时会发生什么--
int x;
scanf("%d",&x);
printf("%c",x);
Input: . (period)
Output: (nothing)
Input: 46
Output: . (period)
当我这样做时,更令人困惑的是:
int x;
scanf("%c",&x);
printf("%d",x);
Input: . (period)
Output: 4142
Input: 46
Output: 4148
Input: 47
Output: 4148
【问题讨论】:
-
如果将
x初始化为某个值,和/或检查scanf的返回值以查看它成功分配了多少参数,会发生什么情况? -
@ordinary - 你想打印什么?你认为它为什么会打印出来?
-
格式字符串必须与
x的类型匹配,否则结果未定义。如果您不检查scanf的返回值,那么您现在不会检查它是否实际读取任何内容。