首先,对不起,如果标题没有意义。我的问题的性质使我很难说出来。
我正在为我的数据结构课程完成一项任务,因为我只在旧学校学习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
在主函数范围内是什么。看来他希望我在编译时提供文本文件名,这样argc
将是2而不是1(我在调试时看到的值),这样它实际上可以执行程序的其余部分而不是立即退出。
我的问题是我不确定如何为程序提供文本文件位置。我看了整个互联网,但由于我甚至不确定在哪个阶段提供文件路径我没有取得任何成功。是否应该在使用g ++编译时传递该信息?在我尝试运行可执行文件时成功编译后?终端命令这样做是什么样的?
答案 0 :(得分:0)
所以我理解你需要在argv中提供一个文件名(如果我不正确,请在下面评论)。 argv
是命令行传递的参数数组,argc
是传递的参数数量(自动设置)。要做到这一点,只需在终端中调用程序,如下所示:./<progam> <file_name>
示例:
编译就像你们的hello world progam一样。
调用程序weatherlog climatedata.txt
。
如果您的文件名称中包含空格,请删除它们或将其名称括在引号中。
答案 1 :(得分:0)
argc
存储传入参数的数量,而argv
指向参数。
if (argc != 2)
表示检查通过控制台模式传入的输入参数的数量。第一个参数始终是程序名称。从第二个参数,您可以传递任何您想要的东西。 char* datafile = argv[1];
表示将第二个参数作为数据文件名。
简而言之,打开控制台模式(Windows上的CMD,Linux上的终端)并输入类似:yourprogram C:\path\to\climatedata.txt
的内容。