2016-05-02 4 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

ваш код читает только один курс (как строку), а в вашем входном файле есть «список» курсов. Таким образом, следующий идентификатор студента, прочитанный из этого файла, на самом деле является курсом. –

+0

MainMenu() - это всего лишь серия операторов switch. Я не могу понять, почему я не могу прочитать всю информацию в первой строке, например, список курсов. и почему я не могу прочитать следующую строку. ive пытались около недели. – Juan

ответ

0

В вашей основной цикл, который читает файл, вы нарушите, когда StudentID == NewStudent.StudentID и вы нарушите, когда StudentID != NewStudent.StudentID, что означает, что вы всегда закончить цикл после прочтения первой линия.

При чтении в полях из записей на основе строк всегда проще сначала прочитать в строке и сохранить их в строковом потоке, а затем прочитать поля оттуда. Но это не поможет, если вы не измените свой код, чтобы останавливаться только при обнаружении идентификатора.

Замечание, что while (!inFile.eof()) может давать неправильные результаты. Вам лучше проверить результаты чтения, как уже было сказано, many times on this site.

+0

Спасибо, я удалил инструкции break и добавил поток строк, но я все еще не могу понять, как это должно выглядеть. Все еще только чтение первой строки – Juan

+1

Вы должны сначала прочитать все строки, чтобы проверить, можно ли найти идентификатор. Только после прочтения всех строк вы можете решить, что идентификатор не найден, и если это так, вы должны добавить строку и не перезаписать полный файл. – stefaanv

0

Вы в настоящее время используете break в своей петле, поэтому после первой строки это не будет вторая строка. Вместо break вы должны использовать continue.

Смежные вопросы