我对以下代码感到困惑
#include <stdio.h>
int main(){
int num1, int num2;
scanf("%d/%d", &num1, &num2);
printf("%d", num2);
}
Run Code Online (Sandbox Code Playgroud)
当输入只有12时,为什么我得到32767?
das*_*ght 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);
}
Run Code Online (Sandbox Code Playgroud)
scanf尝试匹配您在格式字符串中提供的模式,并在匹配失败时立即停止.
scanf("%d/%d", &num1, &num2);
Run Code Online (Sandbox Code Playgroud)
试图匹配由2个用'/'分隔的整数组成的模式,例如,如果输入12/22,则num1将设置为12,num2将设置为22.
如果您只输入12,那么它将匹配格式字符串中的第一个%d,将num1设置为12.不会触及num2.由于您的代码未初始化num2,因此它可以具有任何值; 碰巧在你的特定环境中它出现了32767; 它可以很容易地为0或42或任何其他值.