#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更小”?
当我用short
替换int
时,它会提供正确的输出。
我也尝试了%h
,%i
,但输出的内容相同。
出了什么问题?
答案 0 :(得分:2)
使用:
scanf(" %hi %hi %hi ", &a , &b , &c);
%d
适用于int
,其中%hi
适用于short
数据类型
答案 1 :(得分:0)
以下代码通过short *
,但scanf("%d...
需要int *
。使用错误的说明符/类型匹配会导致未定义的行为。
您的编译器应该已经警告过这个问题。 @Olaf
short a;
scanf("%d", &a); // wrong type
而是使用h
修饰符来表示short *
scanf("%hd", &a);
如果您使用的是旧编译器,但缺少h
修饰符,请将其读作int
然后再分配。
int t;
scanf("%d", &t);
a = t;
BTW:最好避免" %d %d %d "
// Avoid last space
// scanf(" %d %d %d ", &a, &b, &c);
scanf("%hd %hd %hd", &a, &b, &c);
// or the following which does the same
scanf("%hd%hd%hd", &a, &b, &c);