如何在C ++中搜索文本文件并打印该行

时间:2018-08-25 19:21:49

标签: c++

我正在尝试制作一个程序,要求用户输入文本文件名,一旦打开,将要求用户输入星号,它将在文件中查找并在该行上打印信息。 对大多数人来说这很明显,但是每当我打开文件并输入星号时,就会打印出整个文本文件。有人可以告诉我我要去哪里了,为什么它不只是打印行而不是整个文件?

#include <iostream>
#include <fstream>
#include <string>

using namespace std;

int main()
{
ifstream input;
string fileName, starName, Name, ProperName, HRnumber, HDnumber, distance;

cout << "Enter the file name >> ";
cin >> fileName;
input.open(fileName.c_str());

if(input.is_open())
{
    cout << "Enter star proper name >> " ;
    cin >> starName;

    while(getline(input, starName, '~'))
    {
          cout << starName << ' ' << Name << ' ' << ProperName << ' ' << HRnumber<< ' '  << HDnumber<< ' '  << distance;
    }

}
else
{
    cout << "The file \"" << fileName << "\" does not exist.";
}
input.close();
}

2 个答案:

答案 0 :(得分:0)

首先,函数std::getline(input,targetstr,delim)input的完整行中读取到字符串targetstr中,而delim告诉函数哪个字符作为行尾。当您传递字符'~'时,并且我想您的文件不包含任何~,则第一个getline调用将把整个文件读入变量starName中。因此,在打印starName时,您将打印完整的文件内容。

修复此问题后,请注意,您不会解析读入的行,也不会检查它是否位于感兴趣的行,并且在访问变量Name时会打印空字符串,...等等。没有任何魔术可以将行内容映射到您的变量,也没有魔术可以检查您是否在感兴趣的行上。

因此,从以下内容开始。回到第一个,您再次陷入困境:

std::string line;
while(getline(input, line))  // use default line endings, i.e. '\n'
{
      // check if line starts with starName (your job to try):
      if (...) {
          // parse the contents of the line (you job to try): 
      }
}

答案 1 :(得分:0)

getline存在问题,可能是由于文件中没有使用~。 请参考以下示例:

 std::cout << "Please, enter your full name: ";
  std::getline (std::cin,name);
  std::cout << "Hello, " << name << "!\n";

在您的情况下,starName正在打印文件的全部内容。

希望这会有所帮助。