Hoe 2D-arrays afdrukken in C++?

Ik probeer een tekstbestand op het scherm af te drukken met behulp van arrays, maar ik weet niet zeker waarom het er niet uitziet zoals het in het tekstbestand staat.

Het tekstbestand:

1 2 3 4
5 6 7 8

Weergegeven op het scherm als volgt na het toepassen van de verwijderfunctie:

1
2
3
4
5
6
7
8

De code:

#include <iostream>
#include <fstream>
#include <stdlib.h>
#include <string>
using namespace std;
const int MAX_SIZE = 20;
const int TOTAL_AID = 4;
void discard_line(ifstream &in);
void print(int print[][4] , int size);
int main()
{
    //string evnt_id[MAX_SIZE]; //stores event id
    int athlete_id[MAX_SIZE][TOTAL_AID]; //stores columns for athelete id
    int total_records;
    char c; 
    ifstream reg;
    reg.open("C:\\result.txt");
    discard_line(reg);
    total_records = 0;
    while( !reg.eof() )
    {
        for (int i = 0; i < TOTAL_AID; i++)
        {
            reg >> athlete_id[total_records][i] ;//read aid coloumns
        }
        total_records++;
        reg.get(c);
    }
    reg.close();
    print(athlete_id, total_records);
    system("pause");
    return 0;
}
void discard_line(ifstream &in)
{
    char c;
    do
        in.get(c);
    while (c!='\n');
}
void print(int print[][4] , int size)
{    
    cout << " \tID \t AID " << endl;
    for (int i = 0; i < size; i++)
    {
        for (int j = 0; j < TOTAL_AID; j++)
        {
            cout << print[i][j] << endl;
        }           
    }
}    

Antwoord 1, autoriteit 100%

Je drukt std::endlaf na elk nummer. Als u 1 rij per regel wilt hebben, moet u na elke rij std::endlafdrukken. Voorbeeld:

#include <iostream>
int main(void)
{
    int myArray[][4] = { {1,2,3,4}, {5,6,7,8} };
    int width = 4, height = 2;
    for (int i = 0; i < height; ++i)
    {
        for (int j = 0; j < width; ++j)
        {
            std::cout << myArray[i][j] << ' ';
        }
        std::cout << std::endl;
    }
}

Houd er ook rekening mee dat het schrijven van using namespace std;aan het begin van uw bestanden als een slechte gewoonte wordt beschouwd, omdat hierdoor sommige door de gebruiker gedefinieerde namen (van typen, functies, enz.) dubbelzinnig worden. Als je uitputtende voorvoegsels met std::wilt vermijden, gebruik dan using namespace std;binnen kleine scopes zodat andere functies en andere bestanden niet worden beïnvloed.


Antwoord 2, autoriteit 6%

Het is niet alleen een vergissing dat je de “endl” mist.
Het programma zal ook de eerste regel in het bronbestand overslaan vanwege het aanroepen van de functie uninstall_line(reg), zodat u alleen de andere gegevens kunt krijgen (5 6 7 8). Het is helemaal niet nodig om de functie te gebruiken.
zorg er daarnaast voor dat u de array init en controleer de grens van de array, zoals MAX_SIZE, om te garanderen dat de invoergegevens de array niet overlopen.


Antwoord 3

je kunt het zo doen

#include <iostream>
int your_array[2][4] = { 
  {1,2,3,4}, 
  {5,6,7,8}  
};
using namespace std;
int main() {
    // get array columns and rows
      int rows =  sizeof your_array / sizeof your_array[0]; 
      int cols = sizeof your_array[0] / sizeof(int); 
      // Print 2d Array
     cout << "your_array data "<<endl<<endl;
    for (int i = 0; i < rows; ++i)
    {
        for (int j = 0; j < cols; ++j)
        {
            std::cout << your_array[i][j] << std::endl;
        }
     //   std::cout << std::endl;
    }
}

uitvoer

1
2
3
4
5
6
7
8

Other episodes