繁体   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