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