为什么这个程序没有打印出想要的输出?

Why this program does not print the desired output?

我只是从这个 link

中了解到 %i 格式说明符

Difference between format specifiers %i and %d in printf

我尝试用这个程序实现它。

#include <stdio.h>

int main(){

    long long a,b;

    printf("Input: ");

    scanf("%i %lld",&b,&a);

    printf("Output: %i %lld",b,a);
}

%i 工作正常,但 %lld 在变量 a 中存储了一个垃圾值。

这是这个程序的输出。

Input : 033 033

Output : 27 141733920846

Process returned 0 (0x0) execution time : 4.443 s Press any key to continue.

谁能解释一下,为什么我在变量 a 中得到垃圾值?

scanf %i 需要一个 int *,但你传递的是 &b,这是一个 long long int *。这有未定义的行为。

您应该使用 %lli

同样的问题出现在printf:使用%lli打印b,而不是%i

您还应该检查 scanf 的 return 值以确保成功读取了两个值。

首先,对 long long int 使用 %i 是未定义的行为,因此请改用 %lli

同样的问题也存在于 printf 语句中。

固定码:

#include <stdio.h>


int main(){

    long long a,b;
    int retval;


    printf("Input: \n");

    retval = scanf("%lli %lld",&b,&a);

    printf("Output: %lli %lld",b,a);
    printf("\nRetval: %d",retval);
    return 1;
}

输入:

033 033

输出:

Input: Output: 27 33 Retval: 2

Live Demo

注意:始终检查 scanf 的 return 值。它 return 是扫描项目的数量,您应该根据您的预期进行测试。