scanf()如何工作?

时间:2014-01-27 00:19:33

标签: c++ c

我对以下代码感到困惑

 #include <stdio.h>
    int main(){
        int num1, int num2;
        scanf("%d/%d", &num1, &num2);
        printf("%d", num2);
    }

当输入只有12时,为什么我得到32767?

4 个答案:

答案 0 :(得分:10)

总是获得32767,因为num2仍然未初始化。以下是如何判断num2是否已初始化的方法:

int how_many = scanf("%d/%d", &num1, &num2);
if (how_many == 0) {
    printf("Nothing is entered\n");
} else if (how_many == 1) {
    printf("Only num1 is entered: %d\n", num1);
} else {
    printf("Both numbers are entered: %d and %d\n", num1, num2);
}

答案 1 :(得分:5)

scanf尝试匹配您在格式字符串中提供的模式,并在匹配失败时立即停止。

scanf("%d/%d", &num1, &num2);

试图匹配由2个用'/'分隔的整数组成的模式,例如,如果输入12/22,num1将设置为12,num2将设置为22。

如果您只输入12,那么它将匹配格式字符串中的第一个%d,将num1设置为12.不会触及num2。由于您的代码未初始化num2,因此它可以具有任何值;碰巧在你的特定环境中它出现了32767;它可以很容易地为0或42或任何其他值。

答案 2 :(得分:0)

在您的代码中,num 2未初始化。这就是它打印垃圾价值的原因。 请尝试以下代码。

#include <stdio.h>
    int main(){
        int num1, int num2;
        scanf("%d", &num1);
        scanf("%d", &num2);
        printf("%d", num2);
    }

答案 3 :(得分:-1)

我相信要在我们使用的屏幕上打印某些东西(printf()函数)以从我们使用的键盘(scanf()函数)获得一些输入。类似于c ++中的(cin函数)。