在scanf()中省略对变量的引用时,程序停止工作。为什么是这样?

时间:2017-06-23 13:04:50

标签: c user-input scanf

如果我在scanf函数中省略对userNumber的引用,为什么这个程序会停止工作?

#include <stdio.h>

int main()
{
    int userNumber;

    printf("Enter a number: ");
    scanf("%d", &userNumber);

    while (userNumber != 10)
    {
        printf("\nWrong number. Try again\n");
        printf("\nEnter a number: ");
        scanf("%d", &userNumber);
    }
    return 0;
}

1 个答案:

答案 0 :(得分:2)

scanf("%d")需要将指针作为第二个参数传递,因此你真的需要写:

int userNumber;
scanf("%d", &userNumber);

如果您取出参考,则输入无法正确读取,userNumber实际上是未初始化,这会导致未定义行为,这可能会解释你见证的行为。

如果你从第一个scanf中删除了引用,你应该看到一个警告:

Georgioss-MacBook-Pro:~ gsamaras$ gcc main.c 
main.c:8:17: warning: format specifies type 'int *' but the argument has type
      'int' [-Wformat]
    scanf("%d", userNumber);
           ~~   ^~~~~~~~~~
1 warning generated.