我是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;
}
如果有人可以更正我的代码,我将非常感谢你!!
答案 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)
好的,你的代码中有一些奇怪的东西。
你有很多int变量。现在,这不一定是坏事,但你使用它们的方式并不是很好。首先,您应该使用更好的名称,这样我们才能真正看到变量的含义。我倾向于使用pos而不是i,除非我在循环中迭代,这样我知道变量是针对数组中的位置。在您的第一个循环中,您的j不会执行任何操作,因此可以将其废弃,因为您尝试访问的名称和年龄中的元素位于同一位置。
在第二个while循环中,您在增加basket_count多维数组时遇到问题。如果你要查看代码并记下数字,你会看到你将值保存到[1] [1],[2] [2]等。如果你只想写五个变量对应于它匹配的玩家,那么你应该使用basket_count [i] [k]或basket_count [i] [l],因为k和l是相同的。您也可以使用for循环来更容易地限制循环的边界。它应该看起来更像是最后的嵌套for循环。
你的main函数应该有一个int类型,所以它正确地返回0。可能现在不是什么大问题,但可能要晚得多。
只是一些提示。学习如何更好地缩进;它使您更轻松地阅读您的代码,并帮助它保持井井有条。我注意到的一件小事是,在你的嵌套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;
}