如果我在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;
}
答案 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.