我对以下代码感到困惑
#include <stdio.h>
int main(){
int num1, int num2;
scanf("%d/%d", &num1, &num2);
printf("%d", num2);
}
当输入只有12时,为什么我得到32767?
答案 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函数)。