我感到困惑与下面的代码scanf()如何工作?
#include <stdio.h>
int main(){
int num1, int num2;
scanf("%d/%d", &num1, &num2);
printf("%d", num2);
}
当输入只有12,为什么我得到32767?
我感到困惑与下面的代码scanf()如何工作?
#include <stdio.h>
int main(){
int num1, int num2;
scanf("%d/%d", &num1, &num2);
printf("%d", num2);
}
当输入只有12,为什么我得到32767?
你不要总是得到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);
}
thx,但是由于num2保持无效,所以num2中没有存储任何内容,但程序如何仍然有输出? –
@FrankTian它叫做记忆!这就是为什么! – Vallentin
确定内存...这很奇怪.... 32767 –
scanf函数试图匹配你给它格式字符串的模式,只要它不能使比赛停止。
scanf("%d/%d", &num1, &num2);
试图匹配由2个由'/'分隔的整数组成的模式,例如,如果你输入12/22,num1将被设置为12,num2将被设置为22.
如果你只输入12,那么它将匹配格式化字符串中的第一个%d,将num1设置为12. num2不会被感动。由于你的代码不初始化num2,它可能有任何值;它发生在你特定的环境中,它以32767出现;它可以很容易地为0或42或任何其他值。
在你的代码中,num 2没有被初始化。这就是为什么它打印出垃圾值。 请尝试下面的代码。
#include <stdio.h>
int main(){
int num1, int num2;
scanf("%d", &num1);
scanf("%d", &num2);
printf("%d", num2);
}
可能是因为num2未初始化,如果你只写了12个。如果我正确读了它,它需要输入格式a/b,其中'a'和'b'都是整数。 – Borgleader
但为什么正好32767? “/”有什么意义? –
/只是格式的一部分。 – Borgleader