2015-08-09 14 views
-5

I осуществление C++. Я хочу сравнить то, что вводится пользователем во всем tex-файле.
Мой текстовый файл что-то вроде этого:сравнение ввода пользователя с текстовым файлом

Кумар Индия +9102223403434 01/02/1980 SingaporeAirlines 8118 Elite -

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

Это мой код. Пожалуйста посоветуй.

#include <iostream> 
#include <string> 
#include <iomanip> 
#include <fstream> 
void Member(); 
using namespace std; 

int main() 
{ 
    int option; 
    string member; 
    cout<<"\tWelcome!\n"; 
    cout<<"\n1. Member"<<endl; 
    cout<<"2. Non member"<<endl; 
    cout<<"Please enter your option."<<endl; 
    cin>>option; 
    system("cls"); 
    { 
    if (option==1) 
    { 
     Member(); 
    } 
    else if (option==2) 
    { 
    cout<<"awesome"; 
    } 
    else 
     cout<<"Invalid choice!"; 
    } 
    system("pause"); 
    return 0; 
} 

void Member() 
{ 
ifstream inFile; 
string userName,userNationality,airline,userType,type,userBirthday,birthday,userContact,Tmiles,userBenefit; 
bool found=false; 
for (int i=0; i<3; i++) 
{ 
cout << "Enter birthday: "; 
cin>>birthday; 
inFile.open("list.txt"); 
if (!inFile) 
cout << "Unable to open file"<<endl; 
else 
{ 
while (!inFile.eof()) 
{ 
    inFile >> userName >> userNationality >> userContact >> userBirthday >> airline >> Tmiles >> userType >> userBenefit; 
if (inFile.fail()) 
    break; 
else if (userBirthday == birthday) 
     { 
     system("cls"); 
     cout<<"welcome"<< " " << userName <<"!" << endl; 
     found=true; 
     break; 
     } 
} 
} 
    } 
inFile.close(); 
    if (!found) //found==false 
     cout<<"You have exceed the limit. PLease try again"<<endl; 
} 
+1

Мой совет должен задать вопрос. Если вы не зададите конкретные вопросы и не описываете, что не работает для вас, тогда вы не получите никакой помощи. – john

+0

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

ответ

0

Проблема в том, что разрыв выходит только из самого внутреннего цикла.

Поэтому, когда вы нарушаете, вы выходите из цикла while, но не для цикла for, поэтому вас снова спрашивают на день рождения.

Изменить этот

for (int i=0; i<3; i++) 

к этому

for (int i=0; i<3 && !found; i++) 
+0

Я сделал смену alr, но он все еще запрашивает меня 3 раза и заканчивает программу, даже если я ввел то, что находится в моем текстовом файле. – user5207716

+0

Ну что ж, тогда использовать отладчик. Узнайте, что на самом деле происходит в вашем коде, а не гадать. – john

+0

что отображается при отладке: «PBL.exe»: загружен «D: \ MS6508 \ PBL \ Debug \ PBL.exe», загружены символы. 'PBL.exe': загружен 'C: \ Windows \ SysWOW64 \ ntdll.dll', символы загружены (информация об источнике удалена). «PBL.exe»: загружен «C: \ Windows \ SysWOW64 \ KernelBase.dll», загружены символы (информация об источниках удалена). 'PBL.exe': загружен 'C: \ Windows \ SysWOW64 \ msvcp100d.dll', загружены символы. Приложение «\ ?? \ C: \ Windows \ system32 \ cmd.exe» найдено в кеше Программа «[2416] PBL.exe: Native» вышла с кодом 0 (0x0). – user5207716

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