用用户输入C 动态分配的数组

dynamically allocated arrays with user input c++

本文关键字:数组 动态分配 用户 输入      更新时间:2023-10-16

我想拥有一个允许用户键入一组数字的迷你函数,并且每个数字都将动态分配到数组中。例如:

int main()
{
    int* x = NULL;
    int n, numbers;
    std::cin >> n;
    x = new int[n]
    for (int i=0;i<n;i++){
        std::cin >> numbers;
        x[i] = numbers;
    }
delete [] x;

所以当用户在

中类型时
3

用户将能够在该

之后输入3个数字
3 1 2 3

我试图将值1、2、3存储到一个数组中,以便看起来像

[1, 2, 3]

,但现在将其存储为

[123]

无论如何我可以解决这个问题吗?我是C 编程的新手,所以我觉得有一个简单的解决方案,但我不确定。谢谢!

您可以将数组的每个元素直接存储到x [i]中。不确定使用什么数字(我从x [i]分配了数字)。

x是要删除的数组。 x = new int[x]上有一个丢失的 ;-是错别字吗?

int main()
{
    int* x = NULL;
    int n, numbers;
    std::cin >> n;
    x = new int[n];
    for (int i=0;i<n;i++){
        std::cin >> x[i];
        numbers = x[i];
    }
delete [] x;

您可以改用vector

#include <iostream>
#include <vector>
using namespace std;
int main()
{
    int n;
    cin >> n;
    vector<int> v;
    for (int i = 0; i < n; ++i)
    {
        int val;
        cin >> val;
        v.push_back(val);
    }
}

c 的vector负责您的内存分配。然后,您可以简单地穿越它并打印其内容。

cout << "[";
for (int i = 0; i < v.size(); ++i)
{
    if (i != 0)
        cout << ",";
    cout << v[i];
}
cout << "]";

示例1

int main()
{
    int* x = NULL;
    int n, numbers;
    std::cin >> n;
    x = new int[n]; // need a semi-colon here
    for (int i=0;i<n;i++)
    {
        std::cin >> numbers;
        x[i] = numbers;
    }
    for (int j = 0; j < n; ++j)
    {
        std::cout << "x[" << j << "] = " << x[j] << std::endl;
    }
    delete [] x; // you mean x, not a
    return 0;
}

修复(我认为只是错别字)后,您的工作正常。但是,除非这是为了进行分配,否则您应该考虑使用std::vector而不是原始的动态内存分配。这样做会将您的代码减少到大约4行。

int main()
{
    std::vector<int> myvector;
    std::copy(std::istream_iterator<int>(std::cin), std::istream_iterator<int>(), std::back_inserter(myvector));
    std::copy(myvector.begin(), myvector.end(), std::ostream_iterator<int>(std::cout, "n"));
    return 0;
}

或在C 11

int main()
{
    std::vector<int> myvector{std::istream_iterator<int>(std::cin),  std::istream_iterator<int>()};
    std::copy(myvector.begin(), myvector.end(), std::ostream_iterator<int>(std::cout, "n"));
    return 0;
}

为什么不动态创建数组?这样,用户不必提前输入元素数量:

#include <iostream>
#include <vector>
using namespace std;
int main()
{
    vector<int> vec;
    int x;
    while (cin >> x)
        vec.push_back(x);
    for (int y: vec)
        cout << y << ' ';
    cout << 'n';
}

cout语句只是为了说明一切都起作用。