我正在尝试制作一个程序,要求用户输入文本文件名,一旦打开,将要求用户输入星号,它将在文件中查找并在该行上打印信息。 对大多数人来说这很明显,但是每当我打开文件并输入星号时,就会打印出整个文本文件。有人可以告诉我我要去哪里了,为什么它不只是打印行而不是整个文件?
#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();
}
答案 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
正在打印文件的全部内容。
希望这会有所帮助。