printf("%d")不显示我输入的内容

Ste*_*rim 7 c printf

我的代码:

printf("Enter a number : ");

scanf("%d", &number);

printf("%d is what I entered\n", &number);
Run Code Online (Sandbox Code Playgroud)

我输入了2,

预期产量: 2 is what I entered

实际产量: 2293324 is what I entered

这有什么问题?

Spi*_*rix 10

printf("%d is what I entered\n", &number);
Run Code Online (Sandbox Code Playgroud)

是错误的,因为%d(在printf)期望一个类型的参数int,而不是int*.这将调用未定义的行为,如C11标准草案(n1570)中所示(强调我的):

7.21.6.1 fprintf函数

[...]

  1. 如果转换规范无效,则行为未定义.282) 如果任何参数不是相应转换规范的正确类型,则行为未定义.

通过使用修复它

printf("%d is what I entered\n", number);
Run Code Online (Sandbox Code Playgroud)

那么,为什么在变量名之前scanf需要&

请记住,当你使用number,你通过价值的变量number,当你使用&number,你通过了地址number(&是地址运算符).

所以,scanf不需要知道它的价值number.它需要它的地址(int*在这种情况下),以便将输入写入其中.

printf另一方面,不需要地址.它只需要知道int要打印的值(在这种情况下).这就是您&在变量名称之前不使用的原因printf.


son*_*yao 7

你正在使用operator& on number,意思是获取它的地址,所以你不打印它的值number,但它的地址,你应该:

printf("%d is what I entered\n", number);
Run Code Online (Sandbox Code Playgroud)