提供依赖于输入的程序的文件路径

Providing a file path to an input-dependent program

本文关键字:程序 路径 文件 输入 依赖于      更新时间:2023-10-16

首先,对不起,如果标题没有意义。我问题的性质使我很难措辞。

我正在为我的数据结构课做作业,由于只在旧学校学习过 Java,我对 c++ 完全完全陌生。该项目是一个天气记录器,它从文本文件climatedata.txt读取数据。我的老师在文件中为我们提供了一个 main 函数(我们不允许以任何方式修改(,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++ 编译时是否应该传递该信息?成功编译后,当我尝试运行可执行文件时?执行此操作的终端命令是什么样的?

所以我知道你需要在 argv 中提供一个文件名(如果我不正确,请在下面评论(。argv是命令行传递的参数数组,argc是传递(自动设置(的参数数量。为此,只需在终端中调用程序,如下所示:./<progam> <file_name>

例:

编译就像你对你好世界程序一样。

调用程序weatherlog climatedata.txt

如果您的文件名称中包含空格,请将其删除或将其名称括在引号中。

argc存储传入参数的数量,而argv指向参数。

if (argc != 2)意味着检查通过控制台模式传入的输入参数的数量。第一个参数始终是程序名称。从第二个参数中,您可以传递所需的任何内容。char* datafile = argv[1];表示将第二个参数作为数据文件名。

简而言之,打开控制台模式(Windows上的CMD,Linux上的终端(并键入以下内容:yourprogram C:pathtoclimatedata.txt.