2017-07-10 76 views
0

首先,如果標題沒有意義,請對不起。我的問題的性質使我很難說出來。提供輸入相關程序的文件路徑

我正在爲我的datastructures類進行任務,並且由於只在我的老學校學過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

從命令行運行程序:'myprogram c:\ mypath \ climatedata.txt'。雖然我們在這裏,[爲什麼iostream :: eof內部循環條件被認爲是錯誤的?](https://stackoverflow.com/questions/5605125/why-is-iostreameof-inside-a-loop-condition-considered-錯誤)點擊鏈接並找出。 – user4581301

+0

在我學校的SSH服務器上運行程序。當我用'./a.out climatedata.txt'命令運行它時,所有返回的都是'Segmentation fault'。看來我已經解決了我不知道如何提供文件和拆箱另一個問題的最初問題...... – ThomasJazz

+0

好的開始。現在在Gnu DeBugger的'gdb'下運行你的程序。非常方便的程序。在這種情況下,你不必做太多事情,只需運行程序,等待它崩潰,然後使用'bt'命令查看崩潰時發生了什麼。絕對值得花時間熟悉'gdb'的更高級用法。你現在花的時間將會被多次回饋。 – user4581301

回答

0

所以我明白你需要在argv中提供一個文件名(如果我不正確,請在下面留言)。 argv是命令行傳遞的參數數組,argc是傳遞的參數數量(自動設置)。要做到這一點只需調用程序在終端這樣的:./<progam> <file_name>

例子:

編譯,就像你一個Hello World編程'。

調用程序weatherlog climatedata.txt

如果您的文件名稱中有空格,請將其刪除或將其名稱用引號引起來。

0

argc存儲傳入參數的數量,而argv指向參數。

if (argc != 2)表示檢查通過控制檯模式傳入的輸入參數的數量。第一個參數始終是程序名稱。從第二個參數你可以傳遞你想要的任何東西。 char* datafile = argv[1];表示將第二個參數作爲數據文件名。

總之,打開控制檯模式(Windows上的CMD,Linux上的終端)並鍵入如下內容:yourprogram C:\path\to\climatedata.txt

相關問題