【问题标题】:Getting random result on calculations在计算中获得随机结果
【发布时间】:2017-04-17 20:12:44
【问题描述】:

刚开始编码,却在尝试做数学时陷入困境。代码应该在用户输入后执行添加,但在终端上运行代码时,我只会不断得到像-952492524 这样的随机结果。解决这个问题的正确方法是什么?

这是代码:

#include <stdio.h>

main()
{
    int iquantity, iprice;
    int iresult = iquantity + iprice;

    scanf("%d", &iquantity);
    scanf("%d", &iprice);

    printf("%d", &iresult);
}

【问题讨论】:

  • ... 和 printf("%d", &amp;iresult); 应该是 printf("%d", iresult);
  • ..它应该是int main(void).. 并且return 0;最终不会有害。
  • C 遵循顺序语言范式。因此,您编写的语句将在另一个之后执行。现在,如何在用户输入iquantityiprice 的值之前执行加法?
  • 如果某事不重要或不常见,为什么编译器要警告你?

标签: c printf scanf


【解决方案1】:

您对 printf 的调用是打印变量的地址而不是其值。 scanf 需要地址,因为它会改变变量的值;这是通过指针传递变量。 printf 只需要读取值,所以参数是值传递而不是指针传递。

这是用 C 编码时要学习的一个重要概念;与现代语言不同,C 不隐藏变量引用:必须接受指针并知道何时使用它,何时不使用。

这是了解有关该主题的更多信息的绝佳链接。 What's the difference between passing by reference vs. passing by value?

试试这样:

#include <stdio.h>

int main(void)
{

    int iquantity, iprice;

    scanf("%d", &iquantity);

    scanf("%d", &iprice);

    int iresult = iquantity + iprice; /* after scanf, not before */

    printf("%d", iresult); /* and don't need a reference here */
}

【讨论】:

    【解决方案2】:

    由于您设置 iresult 的值而没有先给 iquantityiprice 一个值,因此它们默认设置为内存中的不确定值。您需要在 scanf 方法调用之后设置 iresult

    【讨论】:

    • 不是随机值。也许是任意的。
    • @huck_cussler 想解释一下区别吗?
    • @huck_cussler 我的意思是它是一个不确定的值,该值可以是之前内存中的任何值。我的意思不是字面上的随机值。我已经编辑澄清。
    • 如果计算机实际上随机选择了一个内存地址,则随机将是,因为它以某种方式将可能的地址打乱并不确定地选择了一个。任意可能看起来是随机的,但实际上可能具有确定性的基础。计算机不是随机选择地址,它非常明确地定义了计算机在选择地址时的行为方式。但是,它是任意的,因为它不是预先定义的,而且几乎可以肯定会因运行而异。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-08-18
    • 2019-02-04
    • 2013-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多