2013-11-23 20 views
0

我得到了某種形式的房間預約節目的,所以我想在搜索.txt文件,這樣我就可以找到前預訂的房間。搜尋++只得到的第一行

的問題是:

搜索功能只能讀取.txt文件的第一行 所以當我進入一個重複的信息,則只會檢查第一線
u能幫助我走出這得益於

int search(int search_num){  
string search= to_string(search_num); 
int offset; 
string line ; 
ifstream myfile; 
myfile.open("booked.txt", ios::app); 
ofstream booked ("booked.txt", ios ::app); 
    if(myfile.is_open()) 
{ 
    while(!myfile.eof()) 
    { 
     getline(myfile,line); 
     if((offset=line.find(search,0))!=string :: npos) 
     { 
      return 1; 
     } 
     else { 
      return 2; 
      } 
    } 
    myfile.close(); 
} 

else 
    cout <<"Couldn't open" << endl; 

}

+1

這是因爲你在讀完第一行後就把'return'。你的程序只做你告訴它的內容。 – john

+0

,如果你能以系統的方式縮進代碼,以便它可以幫助人們想幫你誰這將是有益的。 – Louis

回答

2

您通過返回if語句的這兩種情況下的值結束函數的執行。返回一個值將結束函數的執行,所以你總是在讀完第一行後結束。我的猜測是你要的return 2;移動到你的函數的末尾。

注意,這樣你也總是return而沒有調用myfile.close()這可能會導致其他地方的問題。雖然我不明白你的返回值1和2的含義,但我建議這樣做:

int search(int search_num){  
string search= to_string(search_num); 
int offset; 
string line ; 
ifstream myfile; 
myfile.open("booked.txt", ios::app); 
int return_value = 2; 
ofstream booked ("booked.txt", ios ::app); 
if(myfile.is_open()) { 
    while(!myfile.eof()) { 
     getline(myfile,line); 
     if((offset=line.find(search,0))!=string :: npos) { 
      return_value = 1; 
      break; 
     } 
    } 
    myfile.close(); 
} else { 
    cout <<"Couldn't open" << endl; 
} 
return return_value; 
} 
+2

很好的答案,除了關於'myfile.close()'的一點。 ofstream析構函數將關閉文件,但函數退出。顯式關閉文件實際上是不必要的(儘管沒有錯誤)。 – john

+0

謝謝約翰,我沒有意識到這一點。 – jens108

+0

感謝爵士非常多,妳的人:) 但請如果ü可以幫助我做一些別的東西我怎麼可以刪除特定的值。 txt文件? – BishoyM