【问题标题】:Why getting random outputs, in place of input taken in C?为什么要随机输出,而不是 C 中的输入?
【发布时间】:2018-10-14 01:06:26
【问题描述】:

这是 C。因此尝试将多个输入放入此数组并在输出输入 6356740 "6356740 "6356748 6356752" 时不断获得这样的数字

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int quiz[4];

    printf("Enter four quiz grades: ");
    scanf("%d %d %d %d", &quiz[1], &quiz[2], &quiz[3], &quiz[4]);

    printf("%d %d %d %d", &quiz[1], &quiz[2], &quiz[3], &quiz[4]);

}

【问题讨论】:

  • 在不知道您如何提供此输入的情况下,有人如何知道为什么会发生这种情况。正如您使用了"8923498",这使它成为字符串并将其分配给整数并不是一件明智的事情。
  • 不管是什么,我只是输入 1 2 3 4 并且仍然得到这些数字
  • 那么你知道为什么会这样吗?
  • 我不知道我做到了。抱歉,我是网站新手
  • 关于:scanf("%d %d %d %d", &amp;quiz[1], &amp;quiz[2], &amp;quiz[3], &amp;quiz[4]); quiz[] 只有 4 个“槽”,在 C 中,对数组的索引从 0 开始并继续(数组中的条目数 -1)

标签: c arrays


【解决方案1】:

具有 K 个元素的数组的索引从 0 到 K-1。
(这在任何数组介绍中都提到过。)
读取或写入 quiz[4] 具有未定义的行为。

如果您想打印整数,则不应将指针传递给printf

int main()
{
    int quiz[4];

    printf("Enter four quiz grades: ");
    scanf("%d %d %d %d", &quiz[0], &quiz[1], &quiz[2], &quiz[3]);

    printf("%d %d %d %d", quiz[0], quiz[1], quiz[2], quiz[3]);
    return 0;
}

【讨论】:

    【解决方案2】:

    您将数组定义为

    int quiz[4]表示第一个引用是quiz[0],第二个是quiz[1],第三个是quiz[2],最后一个是quiz[3]

    在您的代码中,您引用了第 2、3、4 和 undefined 第 5 个条目。这很重要,因为您可能会损坏程序中的数据,从而导致未定义的结果。

    您看到的数字是指向数组中整数的地址的整数值。请注意,它们增加了 4,即 int 的大小。

    此外,您的 printf 正在打印 int 的地址,而不是 int 本身。该行应为

    printf(“%d %d %d %d”, quiz[0], quiz[1], quiz[2], quiz[3]);

    【讨论】:

    • 指针和数组一开始会让人困惑,但它们会自然而然地出现。如果这有用,请点赞。祝你好运。
    【解决方案3】:

    如果输入的成绩是数字,那么所有四个位置的“%d”都可以。但是,如果您输入的是字母,那么您应该使用 '%s' 来代替。

    正如 Hogstrom 和 molbdnilo 所说,数组的第一个条目是 0,第二个是 1,依此类推。因此,您必须使用 &quiz[0] 而不是 &quiz[1] .. 等等。

    【讨论】:

    • 如果输入字符串,除了将%d 更改为%s 之外,还有更多工作要做。用户是否正在考虑输入字符串也不清楚。您的第二段或多或少涵盖了其中一个问题;它没有涵盖另一个大问题。
    • 是的,我同意这一点。但是考虑到这里的“测验”这个词,我认为这只是一个没有安全考虑的学校项目。通常成绩以字母形式给出,因此我提供了基本答案。顺便说一句,你能看看我最近的问题,了解我自己的情况吗:stackoverflow.com/questions/52797828/…
    猜你喜欢
    • 2014-12-14
    • 2017-03-08
    • 1970-01-01
    • 1970-01-01
    • 2020-10-01
    • 2020-05-12
    • 2021-11-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多