gpt4 book ai didi

c++ - 将 int 与 string 和 getline 一起使用没有错误

转载 作者:行者123 更新时间:2023-11-28 04:10:35 25 4
gpt4 key购买 nike

我正在创建一个程序,它从文件中读取作者、标题和卷数并打印出标签,

(例如亚当斯完整的世界史第 1 卷,共 10 卷

亚当斯完整的世界史第 2 卷,共 10 卷等)

为了使其正确读取而不是无限循环,我必须将所有变量更改为字符串。但是,为了将来引用卷号,我需要它是 int 以便我可以比较数量。我对使用 do-while 循环进一步编写代码的想法进行了注释,以说明为什么我希望 vnum 具有 int 值。

#include <fstream>
#include <iostream>
#include <string>
using namespace std;
int main()
{

ifstream fin;
string author;
string title;
string vnum;
int counter=1;

fin.open("publish.txt", ios::in);


while (!fin.eof())
{
getline(fin, author);
getline(fin, title);
getline(fin, vnum);

//do
//{
cout << author << endl;
cout << title << endl;
cout << "Volume " << counter << " of " << vnum << endl;
cout << endl;
//counter++;
//} while(counter < vnum);

}
fin.close();
return 0;

}

我正在阅读的文件:

亚当斯

完整的世界史

10

塞缪尔斯

我的犯罪生涯

2

鲍姆

巫师故事

6

最佳答案

首先,避免使用

while (!fin.eof())

参见 Why is “while ( !feof (file) )” always wrong?了解它会导致的问题。

针对您的任务,我建议:

  1. 创建一个结构来保存数据。
  2. 添加一个函数以从 std::istream 中读取 struct 的所有成员。
  3. 添加一个函数,将 struct 的所有成员写入 std::ostream
  4. 简化 main 以使用上面的代码。

我的建议是:

struct Book
{
std::string author;
std::string title;
int volume;
};

std::istream& operator>>(std::istream& in, Book& book);
std::ostream& operator<<(std::ostream& out, Book const& book);

这将有助于将 main 简化为:

int main()
{
ifstream fin;
Book book;

// Not sure why you would need this anymore.
int counter=1;

fin.open("publish.txt", ios::in);

while ( fin >> book )
{
cout << book;
++counter;
}

return 0;
}

读写Book的函数可以是:

std::istream& operator>>(std::istream& in, Book& book)
{
// Read the author
getline(in, book.author);

// Read the title
getline(in. book.title);

// Read the volume
in >> book.volume;

// Ignore rest of the line.
in.ignore(std::numeric_limits<std::streamsize>::max(), '\n');

return in;
}

std::ostream& operator<<(std::ostream& out, Book const& book)
{
out << book.author << std::endl;
out << book.title << std::endl;
out << book.volume << std::endl;

return out;
}

关于c++ - 将 int 与 string 和 getline 一起使用没有错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57911968/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com