scand中的%d无效。编号4223092出现

时间:2019-03-14 12:02:40

标签: c printf scanf

有人可以帮助我使用此代码吗?我没有看到任何问题,但是不知何故。当我键入自己喜欢的电话号码并按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;
}

3 个答案:

答案 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);