簡體   English   中英

C ++ getline()函數引入整個文件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM