如果在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;
}

最佳答案

scanf("%d")需要传递一个指针作为其第二个参数,因此您确实需要编写:

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

如果取出引用,则输入将无法正确读取,而userNumber实际上处于未初始化状态,这将导致未定义的行为,这可能解释了您看到的行为。
如果从第一次扫描中删除了引用,则应该看到一个警告:
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.

关于c - 当在scanf()中省略对变量的引用时,程序停止工作。为什么是这样?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44722195/

10-08 21:46