2014-02-22 65 views
0

任何錯誤,我寫這個代碼打開一個文件,一切都存儲到一個全局字符數組隊[800]檢查,看看是否有輸入文件

void readfile(char usrinput[]) // opens text file 
{ 
    char temp; 
    ifstream myfile (usrinput); 
    int il = 0; 
    if (myfile.is_open()) 
    { 
     while (!myfile.eof()) 
     { 
     temp = myfile.get(); 
     if (myfile.eof()) 
     { 
      break; 
     } 
     team[il] = temp; 
     il++; 
     } 
     myfile.close 
    }  
    else 
    { 
     cout << "Unable to open file. (Either the file does not exist or is formmated incorrectly)" << endl; 
     exit (EXIT_FAILURE); 
    } 
    cout << endl; 
} 

用戶需要創建一個輸入文件格式爲第一列是名稱,第二列是雙列,第三列也是雙列。事情是這樣的:

Trojans, 0.60, 0.10 
Bruins, 0.20, 0.30 
Bears, 0.10, 0.10 
Trees, 0.10, 0.10 
Ducks, 0.10, 0.10 
Beavers, 0.30, 0.10 
Huskies, 0.20, 0.40 
Cougars, 0.10, 0.90 

我想,退出當前添加一個檢查,如果用戶只進入7支隊伍在哪裏,它的程序,或如果用戶輸入超過8支球隊,或雙號。

香港專業教育學院嘗試創建使用計數器if語句(計數器!= 8,你跳出循環/程序的),在我這個分裂成三個不同的陣列,但沒有工作的另一個功能。我現在試圖在這個功能中完成這個檢查,如果可能的話可以有人引導我在正確的方向?我非常感謝所有的幫助,請讓我知道我是否可以提供更多信息,使事情不那麼模糊。

編輯:我們是不允許使用的載體或字符串

回答

0

我建議切換到矢量代替的陣列,並且使用函數getline得到一個線在一個時間。此外,我不確定您是如何從代碼中的文件中返回數據的。

僞代碼:

void readfile(char usrinput[], std::vector<string>& lines) // opens text file 
{ 
    ifstream myfile (usrinput); 
    if (!myfile.good()) { 
     cout << "Unable to open file. (Either the file does not exist or is formmated incorrectly)" << endl; 
     exit (EXIT_FAILURE); 
    } 

    std::string line; 
    while (myfile.good()) { 
     getline(myfile, line); 
     lines.push_back(line); 
    } 
    myfile.close(); 

    // it would be safer to use a counter in the loop, but this is probably ok 
    if (lines.size() != 8) { 
     cout << "You need to enter exactly 8 teams in the file, with no blank lines" << endl; 
     exit(1); 
    } 
} 

這樣稱呼它:

std::vector<string> lines; 
char usrinput[] = "path/to/file.txt"; 
readfile(usrinput, lines); 

// lines contains the text from the file, one element per line 

此外,檢查了這一點:How can I read and parse CSV files in C++?

+0

噢,我的壞我忘了說,我們不允許使用矢量 – user3255966

+0

在這種情況下,我建議將行創建爲固定大小的char []的8元素數組而不是矢量('char lines [8] [100]')。然後,在循環中使用一個計數器,可能類似'for(int i = 0; i <8 && myfile.good(); ++ i)'。另外,請查看istream :: getline(http://www.cplusplus.com/reference/istream/istream/getline/)和strcpy(http://www.cplusplus.com/reference/cstring/strcpy/)。 –

+0

是的,我認爲這將工作,即時通訊只是不知道如何執行到我當前的代碼存儲到團隊[il] – user3255966

相關問題