【发布时间】:2017-01-24 15:21:15
【问题描述】:
#include<stdio.h>
int main()
{
short a, b, c;
printf("Enter the values of a, b and c: ");
scanf(" %d %d %d ", &a, &b, &c);
if( a<b && a<c )
printf( "a is smaller" );
else if( b<a && b<c )
printf( "b is smaller" );
else
printf( "c is smaller" );
return 0;
}
对于输入a=10、b=12、c=13,它给出的输出是“c is small”?
当我用int 替换short 时,它会给出正确的输出。
我也尝试过%h、%i,但输出相同。
怎么了?
【问题讨论】:
-
这是 UB,您传递的是
short而不是int,这是%d格式说明符所期望的类型 -
未定义的行为是未定义的。
-
您是否假设
short和int的宽度相同? -
最简单的方法是打印程序读取的值,以确保程序读取的内容是您预期的。在您检查是否获得了
scanf()读取的三个值后添加printf("Data: a = %d, b = %d, c = %d\n", a, b, c);。 -
阅读
scanf的文档和你使用的其他功能。还要启用编译器警告并注意它们。如果您的编译器无法检查scanf/printf格式字符串,请使用现代编译器。