为什么在&(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/

10-11 23:23