我感到困惑與下面的代碼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