在文本文件中逐行前进(c ++)

时间:2016-03-17 21:31:46

标签: c++

我一直致力于一个旨在从文本文件的多行读取数据的程序。我对第一行没有任何问题,但我不知道如何进入第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 ++比较陌生,所以如果你太技术化,我可能听不懂你说的一切。

3 个答案:

答案 0 :(得分:1)

这样的东西
while(infile >> radius >> height >> letter) { 
     // process, radius height and letter
}

应该扭曲你想去的地方。

输入行

999

将停止该循环。

答案 1 :(得分:1)

我建议这样做:

...
infile.open (Exercise4);

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

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

答案 2 :(得分:0)

我建议您使用getline;

std::ifstream fin("myFile.txt");

for (std::string line; std::getline(fin, line); )
{
    std::cout << line << std::endl;
}

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