在文本文件 (c++) 中逐行向前移动

Moving forward line by line in a text file (c++)

本文关键字:逐行 移动 文本 文件 c++      更新时间:2023-10-16

我一直在开发一个程序,旨在从文本文件的几行读取数据。我对第一行没有问题,但我不确定如何移动到第 2、3 行等。

未设置文件的内容和长度,但内容可能如下所示:

1.0 1.0 C
1.0 1.0 V
1.0 1.0 S
1.0 1.0 D
1010.0 250.0 C
999

这是我的程序(到目前为止);

#include <fstream>
#include <iostream>
#include <string>
#include <iomanip>
#include <math.h>
using namespace std;
int main()
{
    double radius;
    double height;
    char letter[1];
    char Exercise4[80] = "Exercise4.txt";
    ifstream infile;
    infile.open (Exercise4);
    infile >> radius >> height >> letter;
    while (radius != 999) {
    cout << endl << endl;
    double Pi;
    Pi = 3.141592;
    cout << setprecision(2) << fixed;
    //math & calculations
    double Circ;
    Circ = radius*2*Pi;
    double Surf;
    Surf = (2*Pi*radius*radius)+(2*Pi*radius*height);
    double Vol;
    Vol = Pi*radius*radius*height;
        if (strcmp(letter, "C") == 0) {
            cout << "Circumfrence: " << Circ << endl;
        }
        else if (strcmp(letter, "S") == 0) {
            cout << "Surface Area: " << Surf << endl;
        }
        else if (strcmp(letter, "V") == 0) {
            cout << "Volume: " << Vol << endl;
        }
        else {
            cout << "Invalid calculation type." << endl;
        }
        cout << letter;
    }
}

任何关于如何前进的信息将不胜感激。

如果这个问题已经发布(似乎是这样),我很抱歉,但我还没有在任何地方看到它发布。

我对C++相对较新,所以如果你太技术化,我可能不会理解你所说的一切。

我建议这样做:

...
infile.open (Exercise4);
while((infile >> radius) && radius!=999 && (infile >> height >> letter)) { 
    ...
}

当遇到半径为 999 或到达文件末尾时,这将停止读取,无论先发生什么。

类似的东西

while(infile >> radius >> height >> letter) { 
     // process, radius height and letter
}

应该把你扭曲到你想去的地方。

输入行

999

将停止该循环。

我建议你使用getline;

std::ifstream fin("myFile.txt");
for (std::string line; std::getline(fin, line); )
{
    std::cout << line << std::endl;
}

这正是您要求的,但不适合您的示例程序。因为在这种情况下,您需要解析每一行以获取变量。但是,如果你想学习如何做这些事情,我建议你学习getline。