2017-09-15 9 views
-2

私のプログラムはファイル "LineUp.txt"を読み込もうとしています。アルファベット順の名前を持っていますが、複数の名前を読み取ることはありません。最初の名前を何度も何度も読むだけです。私はforループを使用していますが、他の問題でこれまで見たことのないwhileループは使用していません。私は助けに感謝します!コードは次のとおりです。forループを使用してファイルを次の行に移動する方法

#include <iostream> 
#include <string> 
#include <fstream> 
using namespace std; 

int main(){ 

    ifstream myFile; 
    string name, front, back; 
    int numOfStudents, i; 

    myFile.open("LineUp.txt"); 

    if(!myFile) 
     cout << "File not found"; 

    cout << "Please enter the number of students: "; 
    cin >> numOfStudents; 

    myFile >> name; 

    front = name; 

    back = name; 

    while(myFile >> name){ 

     if(name < front) 
      front = name; 

     if(name > back) 
      back = name; 

    } 

    for(i = 0; i < numOfStudents; i++){ 

     myFile >> name; 

     cout << name << endl; 

    } 



    return 0; 
} 
+0

'while'ループはファイルの内容をすべて読み込みます。次の 'for'ループは、EOFを超えて読み込みを試みます。 'for'ループ条件(例えば' i > name'のような)でそれをチェックすると、それはまったく動かないことがわかります。 –

+0

ファイルの先頭に戻るにはどうすればいいですか? – FreckledTerror97

+0

C++の本を読んでみましたか? 'std :: ifstream'の使い方について説明しています。 –

答えて

0

whileループは入力ストリームを使い果たします。

ファイルから再度読み込みたい場合は、新しい入力ストリームを作成する必要があります。

myFile.open("LineUp.txt"); 

if(!myFile) 
    cout << "File not found"; 

cout << "Please enter the number of students: "; 
cin >> numOfStudents; 

myFile >> name; 

front = name; 

back = name; 

while(myFile >> name){ 

    if(name < front) 
     front = name; 

    if(name > back) 
     back = name; 

} 

ifstream myFile2("LineUp.txt"); //Create a new stream 

for(i = 0; i < numOfStudents; i++){ 

    myFile2 >> name; 

    cout << name << endl; 

} 
+0

のみが発行され、ファイルはもう整理されず、それが最初のファイルストリームのポイントになります – FreckledTerror97

+0

@ FreckledTerror97最初のループは完全にメモリ内で動作します。ファイルに書き戻すことはありません。実際には、実際には何も並べ替えません。それがしているのは、見つけた姓と名を追跡することだけです。代わりに 'std :: vector'にファイルを読み込み、' vector'の内容を味わい( 'std :: sort'が助けてくれる)ように並べ替え、' vector'の内容を出力します。 – user4581301

+0

これは宿題の問題です。ベクターを使用することは想定されていません – FreckledTerror97

関連する問題