2016-05-02 7 views
0

私の同級生は既にこのトピックについて同様の質問を投稿していることを知っていますが、これはどのように動作するのでしょうか? これは、偽の学生情報が含まれるファイルのセットアップです:私は、以下の行の任意のテキストファイルの最初の行を読んでいないことができていますいくつかの理由についてテキストファイル内の値を検索する

918273645,Steve,Albright,ITCS2530,MATH210,ENG140 
123456789,Kim,Murphy,ITCS2530,MATH101 
213456789,Dean,Bowers,ITCS2530,ENG140 
219834765,Jerry,Clark,MGMT201,MATH210 

を。私は、各行の最初の9文字を読み、それをユーザーの入力と比較する方法を理解する必要があります。その後、その行の残りの部分を持ち越します。しかし、どこが間違っているのか分からない。

これは私がこれまで持っているものです。

ファイルを読み込み、あなたのメインループで
void Login() 
{ 

    Student NewStudent; 
    ifstream inFile; 
    ifstream outFile; 
    string inFileName = "C:\\Users\\Prophet\\Desktop\\registration.txt"; 
    string outFileName = "C:\\Users\\Prophet\\Desktop\\registration.txt"; 
    openInputFile(inFile, inFileName); 



    while (true) 
    { 
     cout << "Please enter your student ID\n" << endl; 
     cin >> NewStudent.StudentID; 

     if (NewStudent.StudentID.length() == 9) 
      break; 
     else 
      cout << "That ID is invalid - IDs are 9 digits" << endl; 
    } 



    if (inFile.is_open()) 
    { 


     while (!inFile.eof()) 

     { 
      string line; 
      while (getline(inFile, line)) 
      { 
       stringstream ss(line); 

       string StudentID, FirstName, LastName, ListOfCourses; 
       getline(ss, StudentID, ','); 
       getline(ss, FirstName, ','); 
       getline(ss, LastName, ','); 
       getline(ss, ListOfCourses, ','); 
       cout << "\n"; 
       { 
        if (StudentID == NewStudent.StudentID) 
        { 
         cout << "Welcome to the Macomb Community College enrolment system " << FirstName << " " << LastName << endl; 
         inFile.close(); 
         MainMenu(); 

        } 
        if (StudentID != NewStudent.StudentID) 
        { 
         cout << "Welcome New student" << endl; 
         cout << "Please enter yuour first name: "; 
         cin >> NewStudent.FirstName; 
         cout << "Please enter yuour last name: "; 
         cin >> NewStudent.LastName; 
         outFile.open("C:\\Users\\Prophet\\Desktop\\registration.txt"); 
         openOutputFile(outFile, outFileName); 
         MainMenu(); 


        } 
       } 
      } 
     } 
    } 
} 
+1

[MCVE]を投稿してください。 'MainMenu()'は実際にはどういう意味ですか? –

+0

あなたのコードは1つのコース(文字列として)を読み込みますが、入力ファイルにはコースの「リスト」があります。そのファイルから読んだ次の生徒IDは、実際にはコースです。 –

+0

MainMenu()は単なる一連のswitch文です。私が理解できないのは、コースのリストのように、最初の行のすべての情報を読むことができない理由です。そしてなぜ私は次の行を読むことができません。約1週間は試みている。 – Juan

答えて

0

、ときStudentID != NewStudent.StudentIDStudentID == NewStudent.StudentID、あなたが常に最初のを読んだ後、ループを終了することを意味し、壊れたときに壊れますライン。

ラインベースのレコードからフィールドを読み込む場合は、まずそのラインを読み込んでストリングストリームに格納してそこからフィールドを読み込むほうが簡単です。しかし、idが見つかったときにのみコードを停止するように変更しない限り、それは役に立ちません。

備考while (!inFile.eof())は間違った結果を与える可能性があります。既に述べたように、読んだ結果をチェックするほうがよいでしょうmany times on this site

+0

ありがとうございます。私は、ブレークステートメントを削除し、文字列ストリームを追加しますが、私はまだこれがどのように見えるかを理解できません。まだ最初の行を読むだけです – Juan

+1

IDを見つけることができるかどうかを確認するためには、まずすべての行を読む必要があります。すべての行を読んだ後で、IDが見つからなかったと判断することができます。その場合は、行を追加し、完全なファイルを上書きしないでください。 – stefaanv

0

あなたのループでは現在breakが使用されています。したがって、最初の行の後は2行目にはなりません。 breakの代わりにcontinueを使用する必要があります。

関連する問題