[英]C++ getline() function bringing in whole file
我正在嘗試搜索文檔並找到一個子集來打印出該特定行,但是,它似乎立即引入了整個消息。
ifstream inputFile("searchfile.dat");
int search;
cout << "Enter what you're searching: ";
cin >> search;
string line;
//bool notFound;
while(getline(inputFile, line) /*&& notFound*/){
if (line.find(search)) {
cout << line << endl;
//notFound = false;
}
//line = "";
}
inputFile.close();
這是家庭作業,所以我改變了一些變量。 在回答時請記住這一點(即解釋發生了什么,所以我可以從中學習)
非常感謝!
PS這是我目前正在使用的數據:
Name1 Name1 1000001 12.00
Name2 Name2 1000002 14.00
Name3 Name3 1000004 16.00
我需要搜索1000000的數字並打印出該行。 例如,我將搜索1000002,它將打印:Name2 Name2 1000002 14.00
現在它將打印整個事物
對於一個非常基本的修復,這樣做
#include<iostream>
#include<fstream>
using namespace std;
int main(){
ifstream inputFile("searchfile.dat");
string search;
cout << "Enter what you're searching: ";
cin >> search;
string line;
while(getline(inputFile, line) ){
if (line.find(search) != string::npos) {
cout << line << endl;
}
}
}
你遇到的問題是雙重的。
首先, string::find
不會返回可以在布爾上下文中正確計算的內容。 它返回可以找到值的索引,否則返回string::npos
。 因此,如果您檢查它是否會正確評估您的。
另一個問題是您將搜索作為整數輸入,然后嘗試在字符串中找到它。 結果它調用了這個size_type find (charT c, size_type pos = 0) const;
find的重載,試圖找到一個字符。 它以這種方式發生,因為int可以隱式轉換為char。 您應該將id作為字符串讀入,或者在將其與find
一起使用之前將其轉換為字符串。
注意其他一些事情。 這段代碼有點脆弱,因為它會在該行的任何地方找到該字符串,因此如果名稱或工資以某種方式包含該值,則可以找到它。 您也不需要顯式關閉ifstream
,它在析構函數中關閉。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.