まず、タイトルが意味をなさない場合は、ごめんなさい。私の質問の本質は、私がフレーズするのがとても難しいことです。入力依存プログラムへのファイルパスの提供
私は自分のデータ構造クラスの課題に取り組んでいます。私は古い学校で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
は、main関数のスコープ内にあるものを考え出しまでプログラムを完全に実行することはない理由として混乱していました。彼はコンパイル中にテキストファイル名を指定して、
argc
が1の代わりに2(デバッグ時に見た値)になるようにして、すぐに終了するのではなくプログラムの残りの部分を実際に実行できるようにしたいようです。
私の問題は、テキストファイルの場所をプログラムに与える方法がわかりません。私はインターネット全体を見てきましたが、ファイルパスを提供する段階がわからないので、私は成功しませんでした。その情報は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'コマンドで実行すると、'セグメンテーションエラー 'が返されます。それは私がファイルを提供し、別の問題をunboxedする方法を知らない私の最初の問題を解決したようだ。 – ThomasJazz
良いスタート。今度はGnu DeBuggerの 'gdb'の下でプログラムを実行してください。非常に便利なプログラム。この場合、プログラムを実行してクラッシュするのを待ってから、 'bt'コマンドを使ってクラッシュしたときに何が起こっていたのかを確認するだけで、多くのことを行う必要はありません。間違いなく、 'gdb'のより高度な使い方に慣れるためには時間を割く価値があります。あなたが今使っている時間は何度も何度も返されます。 – user4581301