2011-03-08 12 views
6

मैं फ़ाइल से विशिष्ट डेटा को दो 2 डी सरणी में पढ़ने की कोशिश कर रहा हूं। डेटा की पहली पंक्ति प्रत्येक सरणी के आकार को परिभाषित करती है, इसलिए जब मैं पहली ऐरे भरता हूं तो मुझे उस रेखा को छोड़ने की आवश्यकता होती है। पहली पंक्ति को छोड़ने के बाद, फ़ाइल में 7 वें पंक्ति तक फ़ाइल से डेटा के साथ पहली सरणी भर जाती है। दूसरी सरणी फ़ाइल से शेष डेटा से भरा है। enter image description hereफ़ाइल से डेटा को सरणी में पढ़ना

और यहाँ मेरी (त्रुटिपूर्ण) कोड अब तक बताया गया है::

#include <fstream> 
#include <iostream> 

using namespace std; 

int main() 
{ 
    ifstream inFile; 
    int FC_Row, FC_Col, EconRow, EconCol, seat; 

    inFile.open("Airplane.txt"); 

    inFile >> FC_Row >> FC_Col >> EconRow >> EconCol; 

    int firstClass[FC_Row][FC_Col]; 
    int economyClass[EconRow][EconCol]; 

    // thanks junjanes 
    for (int a = 0; a < FC_Row; a++) 
     for (int b = 0; b < FC_Col; b++) 
      inFile >> firstClass[a][b] ; 

    for (int c = 0; c < EconRow; c++) 
     for (int d = 0; d < EconCol; d++) 
      inFile >> economyClass[c][d] ; 

    system("PAUSE"); 
    return EXIT_SUCCESS; 
} 

इनपुट हर किसी के लिए धन्यवाद

यहाँ मेरी डेटा फ़ाइल का एक लेबल छवि है।

+1

'int firstClass [FC_Row] [FC_Col];' एक वीएलए है जो सी 99 है, सी ++ नहीं है। * कुछ * सी ++ कंपाइलर्स इसका समर्थन करते हैं, हालांकि पोर्टेबिलिटी के लिए यह बुरा है। आपके स्पष्ट चित्रित आरेख के लिए – Erik

+0

+1। एमएसपीएन्ट से मेरे पास एक +1 मिलता है :-) – corsiKa

+0

+1 आपके प्रोग्राम का नमूना प्रदान करने के लिए। –

उत्तर

3

आपकी while फ़ाइल के अंत तक पुनरावृत्त हो जाती है, आपको उनकी आवश्यकता नहीं होती है।

while (inFile >> seat) // This reads until the end of the plane. 

बजाय का उपयोग करें (while के बिना):

for (int a = 0; a < FC_Row; a++)   // Read this amount of rows. 
    for (int b = 0; b < FC_Col; b++) // Read this amount of columns. 
     inFile >> firstClass[a][b] ; // Reading the next seat here. 

आर्थिक सीटों के लिए एक ही आवेदन करें।


इसके अलावा आप वैक्टर में एरे बदलना चाहते हैं, क्योंकि परिवर्तनीय आकार सरणी नरक हैं।

vector<vector<int> > firstClass(FC_Row, vector<int>(FC_Col)) ; 
vector<vector<int> > economyClass(EconRow, vector<int>(EconCol)) ; 

आप वैक्टर का उपयोग करने के #include <vector> की जरूरत है, उनके उपयोग सरणियों के समान है।

1

आप इस मूल्य के साथ सरणी भरने के बाद seat में पढ़ रहे हैं। फिर आप seat में फिर से पढ़ रहे हैं, और पूरे सरणी को इस नए मान से भर रहे हैं।

इस प्रयास करें:

int CurRow = 0; 
int CurCol = 0; 
while ((inFile >> seat) && (CurRow < FC_Row)) { 
    firstClass[CurRow][CurCol] = seat; 
    ++CurCol; 
    if (CurCol == FC_Col) { 
    ++CurRow; 
    CurCol = 0; 
    } 
} 
if (CurRow != FC_Row) { 
    // Didn't finish reading, inFile >> seat must have failed. 
} 

आपकी दूसरी पाश economyClass का उपयोग करना चाहिए नहीं firstClass

इस तरह चारों ओर पाश स्विच करने के लिए कारण त्रुटि हैंडलिंग, जो त्रुटि होने पर सरल है जब पाश बाहर निकलता है। वैकल्पिक रूप से आप लूप को रख सकते हैं, आंतरिक लूप में infile >> seat का उपयोग करें, लेकिन अगर पढ़ने में असफल हो तो आपको दो लूपों को तोड़ना होगा।

2

आप for छोरों का क्रम बदलने और फ़ाइल से पढ़ने की जरूरत है:

for (rows = 0; rows < total_rows; ++ rows) 
{ 
    for (col = 0; columns < total_columns; ++cols) 
    { 
    input_file >> Economy_Seats[row][column]; 
    } 
} 

मैं EOF और पाठक को अमान्य इनपुट के निपटने के लिए जाँच छोड़ देंगे।

संबंधित मुद्दे