提供与输入相关的程序的文件路径

时间:2017-07-10 01:43:39

标签: c++ file io g++

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

我正在为我的数据结构课程完成一项任务,因为我只在旧学校学习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 ++编译时传递该信息?在我尝试运行可执行文件时成功编译后?终端命令这样做是什么样的?

2 个答案:

答案 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的内容。