首先,如果標題沒有意義,請對不起。我的問題的性質使我很難說出來。提供輸入相關程序的文件路徑
我正在爲我的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 ++編譯時通過?成功編譯後,當我試圖運行可執行文件?終端命令做的是什麼樣的?
從命令行運行程序:'myprogram c:\ mypath \ climatedata.txt'。雖然我們在這裏,[爲什麼iostream :: eof內部循環條件被認爲是錯誤的?](https://stackoverflow.com/questions/5605125/why-is-iostreameof-inside-a-loop-condition-considered-錯誤)點擊鏈接並找出。 – user4581301
在我學校的SSH服務器上運行程序。當我用'./a.out climatedata.txt'命令運行它時,所有返回的都是'Segmentation fault'。看來我已經解決了我不知道如何提供文件和拆箱另一個問題的最初問題...... – ThomasJazz
好的開始。現在在Gnu DeBugger的'gdb'下運行你的程序。非常方便的程序。在這種情況下,你不必做太多事情,只需運行程序,等待它崩潰,然後使用'bt'命令查看崩潰時發生了什麼。絕對值得花時間熟悉'gdb'的更高級用法。你現在花的時間將會被多次回饋。 – user4581301