【发布时间】:2017-07-10 01:43:38
【问题描述】:
首先,如果标题没有意义,对不起。我的问题的性质使我很难表达。
我正在为我的数据结构课程做作业,由于只在我的老学校学习过 Java,所以我对 c++ 完全陌生。该项目是一个天气记录器,它从文本文件climatedata.txt 中读取数据。我的老师在文件中为我们提供了一个主要功能(我们不允许以任何方式修改)weatherlog.cpp,如下所示。
#include <iostream>
#include <fstream>
#include "datalogger.h"
using namespace std;
int main(int argc, char** argv) {
datalogger dl;
if (argc != 2) {
cout << "Usage: " << argv[0] << " <datafile>" << endl;
exit(0);
}
// Read the data
char* datafile = argv[1];
ifstream infile(datafile);
int timestamp;
double temperature;
double windspeed;
while (!infile.eof()) {
infile >> timestamp;
infile >> temperature;
infile >> windspeed;
if (!infile.eof()) {
dl.addData(timestamp, temperature, windspeed);
}
}
// Output the report
dl.printReport();
return(0);
}
最初我很困惑为什么程序永远不会完全执行,直到我弄清楚 argc 是在 main 函数的范围内。似乎他希望我在编译时提供文本文件名,以便argc 将是 2 而不是 1(我在调试时看到的值),以便它可以实际执行程序的其余部分而不是立即退出。
我的问题是我不确定如何为程序提供文本文件位置。我已经查看了整个互联网,但由于我什至不确定在哪个阶段提供文件路径,所以我没有取得任何成功。使用 g++ 编译时是否应该传递该信息?在我尝试运行可执行文件时成功编译后?执行此操作的终端命令是什么样的?
【问题讨论】:
-
从命令行运行程序:
myprogram c:\mypath\climatedata.txt。当我们在这里时,Why is iostream::eof inside a loop condition considered wrong? 点击链接并找出答案。 -
在我学校的 SSH 服务器上运行程序。当我使用命令
./a.out climatedata.txt运行它时,所有返回的都是Segmentation fault。看来我已经解决了我最初的不知道如何提供文件的问题并取消了另一个问题... -
好的开始。现在在 Gnu 调试器
gdb下运行您的程序。非常方便的程序。在这种情况下,您不必做太多事情,只需运行程序,等待它崩溃,然后使用bt命令查看崩溃时发生了什么。绝对值得您花时间熟悉gdb的更高级用法。您现在花费的时间将被多次返还。