gpt4 book ai didi

c++ - 如何读取文本文件的第 2、3 和 4 行。 C++

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

我正在尝试读取 C++ 文本文件的每一行。我让它在文本文件的第一行工作,但我如何阅读其他行?另外,我是一个C++ super 小白,请不要烤我。

代码:

void Grade::readInput()
{
ifstream infile("Grades.txt");

if (infile.good())
{
string sLine;
getline(infile, sLine);
cout << "This is the val " << sLine << endl;
}

infile.close();
}

这是我想要的输出:

这是 val 12

这是 val 17

这是 val 1

这是 val 29

最佳答案

我会给你一些提示 - 这可能更像是 CodeReview.SE现在……

我会推荐

  • 将阅读与打印分开
  • 将成绩视为数字(例如 intdouble),这样您就可以实际使用它们,并验证您没有在阅读废话
  • 使用惯用循环,而不仅仅是 if (infile.good()) - 例如在尝试阅读之前,您无法判断是否已到达文件末尾

修复界面,我建议这样

struct Grade {
void readInput(std::string fname);

void print(std::ostream& os = std::cout) const;
private:
static constexpr auto max_line_length = std::numeric_limits<ssize_t>::max();
std::vector<int> grades;
};

请注意,readInput 读入 grades 而不打印任何内容。 请注意,它采用要读取的文件名作为参数,而不是对某些文件名进行硬编码。

int main() {
Grade grading;

grading.readInput("grades.txt");
grading.print();
}

这将是主程序。

readGrades 的简化/扩展版本可以是:

void Grade::readInput(std::string fname) {
std::ifstream infile(fname);

infile.ignore(max_line_length, '\n'); // ignore the first line

int grade = 0;

while (infile >> grade) {
grades.push_back(grade);
infile.ignore(max_line_length, '\n'); // ignore rest eating newline
}
}

请注意我们如何忽略我们不感兴趣的行或其中的部分。要获得额外的控制,请考虑禁用空格跳过:

 infile >> std::nowskipws;

打印函数可以很简单:

void Grade::print(std::ostream& os) const {
os << "Grades:";
for (int g : grades) {
os << " " << g;
}
os << std::endl;
}

完整演示

Live On Coliru

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

struct Grade {
void readInput(std::string fname);

void print(std::ostream& os = std::cout) const;
private:
static constexpr auto max_line_length = std::numeric_limits<ssize_t>::max();
std::vector<int> grades;
};

int main() {
Grade grading;

grading.readInput("grades.txt");
grading.print();
}

void Grade::readInput(std::string fname) {
std::ifstream infile(fname);

infile.ignore(max_line_length, '\n'); // ignore the first line

int grade = 0;

while (infile >> grade) {
grades.push_back(grade);
infile.ignore(max_line_length, '\n'); // ignore rest eating newline
}
}

void Grade::print(std::ostream& os) const {
os << "Grades:";
for (int g : grades) {
os << " " << g;
}
os << std::endl;
}

打印

Grades: 12 17 1 29

给定grades.txt:

Ignore the first line
12
17
1
29

关于c++ - 如何读取文本文件的第 2、3 和 4 行。 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57999769/

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