程序只读取第一行!C++

3

我的程序需要使用一个 .txt 文件作为输入(时间以秒计,从 1 到 10),来计算自由落体物体的距离。文本文件的内容如下:

1 2 3 4 5 6 7 8 9 10

以下是我的代码。

#include <iostream>
#include <fstream>
#include <cmath>
#include <cstdlib>
using namespace std;

//function prototype
double fallingDistance (int);

void main()
{
    ifstream inputFile;
    int time;
    double distance;

    //open the file
    inputFile.open("05.txt");
    inputFile >> time;

    {
        distance = fallingDistance (time);
        cout << time << "\t\t" << distance << endl;
    }
}
double fallingDistance (int time)
{
    double distance, gravity=9.8;
    distance = static_cast<double>(0.5 * gravity * pow(time,2));
    return distance;
}

这是我的程序编译后的结果:

1 4.9 按任意键继续...

提前感谢!


4
我建议研究循环结构... - Jesse Good
1
你的程序听起来很好。具体问题是什么?它输出了正确的值,然后是VS编译器在Debug配置程序中插入的“按任意键继续…”存根。 - Dai
我希望它能够读取 .txt 文件的第一行之后的内容,并显示十行数据。 - Jeff Youngblood
1个回答

3
cout << time << "\t\t" << distance << endl;

首先从输入文件中读取一个int。接下来使用time初始化distance。然后打印time的值,两个制表符,最后是distance的值。

在执行了这行代码后,main函数返回并且程序退出。为什么你希望它会打印其他内容呢?

如果你需要从文件中获取更多的值,那么你需要使用循环,将整个过程包含在一个循环中,直到读取完整个文件。类似于:

inputFile.open("05.txt");
int time;
while(inputFile >> time) {     
    distance = fallingDistance (time);
    cout << time << "\t\t" << distance << endl;
}

顺便提一下,按照标准,main 的返回类型应该是 int,而不是 void。像你所做的那样省略参数 (int argcchar *argv[]) 是可以的。


是的,我希望它打印出以下列表,而不仅仅是一行。例如,我希望它输出 1 4.9,2 19.6,3 44.1,4 78.4,以此类推直到最后一个值为10。 - Jeff Youngblood
1
@JeffYoungblood:我发布了一个如何做到这一点的示例。 这个; inputFile >> time 从文件中读取下一个值并转换为布尔值。 这意味着,在出现错误,文件结束等情况下,循环将退出。 如果您遇到使用 while(!file.eof())while(!file.fail()) 或类似内容的示例,现在您知道它是错误的。 您会在各个地方看到这种情况,但它总是错误的。 - Ed S.
天啊,我感觉自己好蠢啊...哈哈,谢谢大家! - Jeff Youngblood

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接