Short不起作用但是int呢?

时间:2017-01-24 15:21:16

标签: c int short

#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=10b=12c=13,它会输出“c更小”?

当我用short替换int时,它会提供正确的输出。 我也尝试了%h%i,但输出的内容相同。

出了什么问题?

2 个答案:

答案 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);