【问题标题】:Storing a number of integers into array and printing them out将多个整数存储到数组中并打印出来
【发布时间】:2019-02-05 13:02:49
【问题描述】:

如何使用 for 循环创建一个函数,将给定范围的数字存储到一个数组中,然后在主程序中调用该函数并打印出数组内存储的元素?

int main ()
{
    testing(array, 20);
}

int testing(int array[], int k)
{
    for (int i = 0; k < 20; i++)
    {
        array[k] = i;
        k++;
    }

    for (int j = 0; j < 20; j++)
    {
        cout << array[j] << endl;
    }

}

我得到“测试必须返回值”的错误,我知道我应该有 return var;例如。但是,我不知道如何返回给定元素的数组以使用 for 循环打印出所有元素。

【问题讨论】:

  • int testing(...) 意味着函数应该返回一个int。如果您不想返回任何东西,请将其设为void testing(...)。此外,您需要在调用testing 之前在main 中声明int array[20];
  • 好的,我解决了这个问题,但是得到一堆垃圾值,二十个相同的值:-844651320 -844651320 -844651320。 . .

标签: c++


【解决方案1】:

您的函数和循环结构没有经过精心设计。您可以使用指针而不必返回数组。 我认为这就是你想要做的:

#include <iostream>    

void testing(int* a, int k)
{
    for (int i = 0; i < k; i++)
        a[i] = i;
}

int main()
{
    int a[20];
    testing(a, 20);
    // you can see that a's elements have changed outside the main (in testing)
    for (int j = 0; j < 20; j++)
        std::cout << a[j] << "\n";
    return 0;
}

【讨论】:

  • 返回未找到的测试标识符。
  • K L 你确定你在main() 上面输入了测试函数吗?如果没有,请这样做。如果你不想,你可以在main()上方添加void testing(int* a, int k);。更多信息Function identifier not found
  • 每个程序都从 main() 开始执行。这就是为什么您必须在 main() 启动之前通知程序有关函数的原因。我给出的代码完全正确。能否请您直接复制所有内容并重试。因为它适用于我所知道的所有编译器,包括在线编译器。
  • 我不知道为什么它在代码块中对我有用,但在 VS 2017 中却不行。无论如何,谢谢,我知道内存是如何工作的,我们需要小心传递值/引用,因为函数中的局部变量,位于被调用的堆栈帧中,当它们停止执行时不再保存值。
  • 您在 VS 2017 中遇到的错误是什么。因为我在我的 VS 2017 社区中尝试过它并且它运行良好。
【解决方案2】:

您似乎从未执行过第一个循环。第一个循环的停止条件是 k &lt; 20,但 k 已经是 20。 然后在第二个循环中,数组只打印出之前保存在这些内存位置的垃圾。

我想你的意思是:

for (int i= 0; i < k; i++) {
    array[i] = i;
}
for (int j = 0; j < k; ++j)  {
    cout << array[j] << endl;
}

如果你想打印main 中的数组,你需要稍微改变一下函数,传入一个指向数组的指针而不是数组本身。

另外,您的 main 函数从未初始化要传递给您的函数的数组。

int main (void) {
    int a[20];
    testing (a, 20);
    return 0;
}

最后,将testing函数的返回类型设置为void

void testing (int array[], int k);

总而言之,它应该看起来像这样:

#include <iostream>

using namespace std; // I don't recommend doing this

void testing (int * array, const int k);

int main (void) {

    const int size = 20;
    int a[size] = {0};
    testing (a, size);
    for (int i = 0; i < size; ++i) {
        cout << a[i] << endl;
    }
    return 0;
}

void testing (int * array, const int k) {
    for (int i = 0; i < k; ++i) {
         array[i] = i;
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-22
    • 1970-01-01
    • 1970-01-01
    • 2013-04-04
    • 2013-10-08
    相关资源
    最近更新 更多