为什么在&
(decks
)之前在这里使用scanf("%i", &decks)
?
如果我的输入是像“k”这样的字母,那么它会显示类似“1929597720”的输出。为什么?
#include <stdio.h>
int main(){
int decks;
puts("enter a number of decks:");
scanf("%i", &decks);
if (decks<1) {puts("Please enter a valid deck number");
return 1;
}
printf("there are %i cards\n", (decks*52));
return 0;
}
最佳答案
变量名前的&
表示“使用此变量的地址”。基本上,您是将指向decks
的指针传递给scanf()
至于当您输入“k”(或其他无效输入)时发生的情况-scanf()
失败,并且您看到decks
中已经存在任何随机数据(从未初始化)。
为避免这种情况,请检查scanf()
的返回值,然后初始化decks
。
int decks = 0, scanned;
puts("enter a number of decks:");
int scanned = scanf("%i", &decks);
if ((scanned < 1) || (decks < 1)) {
puts("Please enter a valid deck number");
return 1;
}
关于c - 为什么在变量前使用&?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19747029/