2015-10-25 2 views
0

Я C++ новичок, я хочу задать простой код 2D массива: I want to creat a data type like this2D массив для пользовательского ввода в C++

#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

Я просто изменить код. Теперь ваш код в порядке. Давайте попробуем это:

#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; 
} 
+0

Наслаждайтесь своими усилиями! Моя проблема полностью решена. Я сравниваю ваш код с моим ~ – gn0137exe

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++; 
} 
1

Это должно быть:

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

Вы хотите, чтобы заполнить строку n-й вашего массива, поэтому нет необходимости в другом счетчик. Кроме того, n не изменяется при заполнении строки.

Это и использование однобуквенных переменных по всему вашему коду не самая лучшая идея, код трудно понять. Используйте стандарты кодирования (включая идентификаторы), организуйте свои данные в структурах, это очень поможет вам.

+0

Благодарим вас за советы, я постараюсь реорганизовать свои переменные номенклатуры !! – gn0137exe

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, чтобы упростить ограничение границ цикла. Он должен больше походить на ваш вложенный цикл в конце.

  3. Ваша основная функция должна иметь тип int, поэтому он правильно возвращает 0. Наверное, сейчас не так много, но это может быть намного позже.

  4. Всего несколько советов. Узнайте, как отступ немного лучше; это облегчает чтение кода намного проще и помогает ему оставаться организованным. Небольшая вещь, которую я заметил, это то, что в вашем вложенном цикле вы только давали фигурные скобки снаружи для цикла. Ваш код должен работать нормально, но поскольку вы новичок, вам было бы лучше положить фигурные фигурные скобки на все циклы и инструкции, чтобы быть в безопасности.

+0

Хорошо! Спасибо за советы! Вы даете мне много критических предложений включить правильный аспект кодирования «отступ немного лучше»! – gn0137exe

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; 
} 
Смежные вопросы