c - Scanf_s 读取错误的输入

标签 c printf output scanf

对于下面的代码(C 语言)

    int small_a, small_b;
    printf("Please input two numbers\n");
    scanf_s("%d %d", &small_a, &small_b);
    printf("%d %d", &small_a, &small_b);
    int test_2nd = small_a - small_b;
    if (test_2nd < 0) {
        printf("a is smaller %d", &small_a);
    }
    else {
    printf("b is smaller %d", &small_b);

当我写 4 和 2 时它打印的值是一个巨大的六位数字(在本例中为 5504620 和 5504608)我不明白哪里出了问题。 stdio.h 已作为 header 包含在内。

最佳答案

这里的问题出在打印语句中。在代码中

 printf("%d %d", &small_a, &small_b);

您不需要(想要)获取(打印)地址。删除那个 &

也就是说,这实际上调用了 undefined behavior . %dprintf() 需要一个类型为 int 的参数,而您实质上是在提供一个 int *,导致 UB。

FWIW,要打印地址(指针),您需要使用 %p 格式说明符并将参数转换为 void *

关于c - Scanf_s 读取错误的输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39675667/

相关文章:

c - struct sscanf 无法正常工作?

c++ - 选择排序中计算比较次数时出错

python - 使用 argparse 创建输出文件

c - 使用 C 我想格式化我的输出,以便终端中的输出一旦到达窗口边缘就停止

C编程问题指针和数组2d

c++ - 为什么函数指针定义可以与任意数量的 & 符号 '&' 或星号 '*' 一起使用?

c - 按列打印 AVL 树

c - 使用嵌套的 printf 语句给出奇怪的输出

c - 为什么 printf 隐式 float 到整数的转换不起作用?

java - 如何深度克隆双向链表?