2012-09-07 136 views
4

我想使用數組在屏幕上打印文本文件,但我不確定它爲什麼不以文本文件的方式顯示。如何在C++中打印2D數組?

的文本文件:

1 2 3 4 
5 6 7 8 

屏幕上顯示的應用丟棄功能依次如下:

1 
2 
3 
4 
5 
6 
7 
8 

代碼:

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

即時通訊仍然是新的,因此我的文本文件的佈局和輸出不能正確顯示在我的問題。該文本文件是列格式的,我編譯後得到的輸出是verticle。我希望我有道理。 – Nick

+0

我沒有看到任何問題。你想要輸出看起來像什麼? – vsz

+1

輸出看起來應該與文本文件完全一樣,但出於某種原因它會在屏幕上垂直顯示。我的代碼有問題嗎?如果有的話,請任何人都可以幫我糾正它。 – Nick

回答

12

你後打印std::endl每個號碼。如果你想每行有1行,那麼你應該在每行之後打印std::endl。例如:

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

還要注意的是,在你的文件的開頭寫using namespace std;被認爲是不好的做法,因爲它會導致一些用戶自定義的名稱(類型,函數等)變得曖昧。如果您想避免使用std::的前綴,請在小範圍內使用using namespace std;,以便其他函數和其他文件不受影響。

+0

我仍然是初學者,通過遠程學習學習C++,到目前爲止我沒有遇到過std :: cout。而即時通訊使用DEV作爲我的IDE,所以如果我不使用「使用namespase std」,我遇到錯誤。但非常感謝你的建議。 – Nick

+3

「使用名稱空間標準」在cpp文件中使用時不像標題那麼糟糕。 – evpo

1

你錯過了「endl」不僅是錯誤的。 由於調用函數discard_line(reg),程序也會跳過源文件中的第一行,因此您只能獲取其他數據(5 6 7 8)。根本不需要使用該功能。 此外,請確保您初始化數組並檢查數組的邊界,例如MAX_SIZE,以確保輸入數據不會溢出數組。