用于c ++中用户输入的2D数组

时间:2015-10-25 06:50:24

标签: c++ arrays

我是c ++初学者,我想问一个简单的2D数组代码: I want to creat a data type like this

#include <iostream>
#include <iomanip>
#include <cmath>
#include <string>
#include <windows.h>

using namespace std;
int players=5;
int age[10]={0};
int basket_count[10][5]={0};
string name[10];

main()
{
int n=1;
int i=0;
int j=0;
int k=0;
int l=0;
while (n<=players)
{
cout<<n<<" Player is"<<endl;
cin>>name[i];
cin>>age[j];
while (k<players&&l<5)
{
    cin>>basket_count[k][l];
    k++;
    l++;
}
n++;
i++;
j++;
}
for (int i=0;i<players;i++)
{
for (int j=0;j<5;j++)
    cout<<basket_count[i][j];
}
return 0;
}

如果有人可以更正我的代码,我将非常感谢你!!

5 个答案:

答案 0 :(得分:1)

这应该是:

while (l<5)   
{    
    cin>>basket_count[n][l];    
    l++;    
}

你想要填充数组的第n行,所以不需要在另一个计数器中。填充行时,n也不会改变。

那,并且在你的代码中使用单字母变量并不是最好的主意,代码很难理解。使用编码标准(包括标识),在结构中组织数据,它将对您有所帮助。

答案 1 :(得分:0)

struct DATA
{
      string name;
      int age;
      int basket_count[5];
} data[10];

使用此结构存储数据:

cin>>data[n].name;
cin>>data[n].age;

while (l<5)
{
    cin>>data[n].basket_count[l];
    l++;
}

答案 2 :(得分:0)

好的,你的代码中有一些奇怪的东西。

  1. 你有很多int变量。现在,这不一定是坏事,但你使用它们的方式并不是很好。首先,您应该使用更好的名称,这样我们才能真正看到变量的含义。我倾向于使用pos而不是i,除非我在循环中迭代,这样我知道变量是针对数组中的位置。在您的第一个循环中,您的j不会执行任何操作,因此可以将其废弃,因为您尝试访问的名称和年龄中的元素位于同一位置。

  2. 在第二个while循环中,您在增加basket_count多维数组时遇到问题。如果你要查看代码并记下数字,你会看到你将值保存到[1] [1],[2] [2]等。如果你只想写五个变量对应于它匹配的玩家,那么你应该使用basket_count [i] [k]或basket_count [i] [l],因为k和l是相同的。您也可以使用for循环来更容易地限制循环的边界。它应该看起来更像是最后的嵌套for循环。

  3. 你的main函数应该有一个int类型,所以它正确地返回0。可能现在不是什么大问题,但可能要晚得多。

  4. 只是一些提示。学习如何更好地缩进;它使您更轻松地阅读您的代码,并帮助它保持井井有条。我注意到的一件小事是,在你的嵌套for循环中,你只给了外面的花括号来循环。您的代码应该可以正常工作,但由于您是初学者,最好将花括号放在所有循环和if语句上,以保证安全。

答案 3 :(得分:0)

这是一种创建,填充,打印和删除简单2D阵列的方法......

#include<iostream>
#include<exception>

using namespace std;

int main() {

    int rows{ 0 }, cols{0};
    int** data;

    cout << "Enter number of rows: ";
    cin >> rows;
    cout << "Enter number of columns: ";
    cin >> cols;

    try {

        data = new int*[rows];

        // Allocate each row
        for (int i = 0; i < rows; i++) {
            data[i] = new int[cols];
        }

        // Fill 2D array with data
        int temp{ 0 };
        for (int i = 0; i < rows; i++) {
            for (int j = 0; j < cols; j++) {
                cout << "Enter value for data[" << i << "][" << j << "]: ";
                cin >> temp;
                data[i][j] = temp;
            }
        }

        // Print array
        cout << "Your array is..." << endl;
        for (int i = 0; i < rows; i++) {
            for (int j = 0; j < cols; j++) {
                cout << data[i][j] << " ";
            }
            cout << endl;
        }

        // Delete array
        for (int i = 0; i < rows; i++) {
            delete[] data[i];
        }
        delete[] data;
        data = nullptr;

    }
    catch (const std::exception &e) {
        cerr << e.what();
    }

    // system("pause");
    return 0;
}

答案 4 :(得分:0)

我只是更改您的代码。你的代码现在还可以。让我们试试这个:

#include <iostream>
#include <iomanip>
#include <cmath>
#include <string>
#include <windows.h>

using namespace std;
int players=5;
int age[10]= {0};
int basket_count[10][5]= {0};
string name[10];

main()
{
    for (int n=0; n<players; n++)
    {
        cout<<n+1<<" Player is"<<endl;
        cin>>name[n];
        cin>>age[n];
        for (int i=0; i<5; i++)
        {
            cin>>basket_count[n][i];
        }

    }
    for (int i=0; i<players; i++)
    {
        for (int j=0; j<5; j++)
            cout<<basket_count[i][j];
    }
    return 0;
}