有人可以帮助我使用此代码吗?我没有看到任何问题,但是不知何故。当我键入自己喜欢的电话号码并按Enter键时,电话号码4223092出现了。
int target;
int after;
#include <stdio.h>
int main() {
printf("What is 6 x 4?: ");
scanf("%d", &target);
if (target == 24) {
printf("Correct!\n");
printf("By the way what is your favorite number?: ");
scanf("%d", &after);
printf("%d is my favorite number too!\n", &after);
} else {
printf("Wrong!\n");
printf("By the way what is your favorite number?: ");
scanf("%d", &after);
printf("%d is my favorite number too!\n", &after);
}
return 0;
}
答案 0 :(得分:4)
在您的代码中
ModelB
您不需要 printf("%d is my favorite number too!\n", &after);
。您要打印值,而不是地址。
仅以当前形式,您将&
作为参数传递给int *
会调用undefined behaviour。因此,您不能以任何方式证明输出的合理性。
%d
期望使用类型%d
而不是int
的参数。传递不兼容的参数类型将调用UB。
引用int *
,第§7.21.6.1,P9
[...]如果有任何参数 不是对应转换规范的正确类型,其行为是 未定义。
答案 1 :(得分:1)
printf函数不需要将变量的地址打印到stdout。只需像这样传递变量名:
printf("%d is my favorite number too!\n", after);
%d格式说明符看起来显示整数值。如果您传递其他内容(例如int *),则会给您带来奇怪而出乎意料的结果。
要使答案更完整,请打印指针变量,请使用%p格式说明符。
答案 2 :(得分:-1)
值4223092是“之后”变量的地址。
在C语言中,不需要指针即可打印值。您只需要变量的值。因此,无论何时打印变量,都只打印变量而不是变量的指针(地址)。
所以只需在代码中更改以下几行
printf("%d is my favorite number too!\n", &after);
收件人
printf("%d is my favorite number too!\n", after);