2017-02-18 21 views
0

コマンドラインからテキストファイルを読み込めます。 それでは、私がやろうとしていることコマンドプロンプトからテキストファイルを読む

1である)./a.out menu1.txt menu2.txt

そしてそれはまた、

ことができるよう、ユーザーがどこから読みたいどのように多くのファイルを選択してみましょう

2)./a.out menu1.txt menu2.txt menu3.txtどうすればよいですか?

menu1.txt 
hamburger 5.00 
pizza 3.25 
chips 2.50 

menu2.txt 
hamburger 2.00 
pizza 2.35 
chips 1.50 

menu3.txt 
hamburger 4.00 
pizza 5.35 
chips 0.50 

これは私がこれまで持っているものです。

#include <fstream> 
int main(int argc, char *argv) 
{ 
    ifstream inStream; 

    for (int i = 1; i < argc; i++) { 

    String menu1 = *argv[i]; 
    String menu2 = *argv[i]; 
    String menu3 = * argv[i]; 
    cout << i << " " << endl; 

} 

}

+0

いいえ。何を試しましたか?あなたのコードはどこですか? –

+0

それから、ファイルを読んでみてください:) - あなたはループを準備しています – Dusteh

+0

あなたの本はあなたに 'ifstream'の使い方を教えてください。あなたは[良い本]を持っています(http://stackoverflow.com/a/388282/7455774)、そうですか? –

答えて

0

機能mainは(プログラム自体の名前を含む)コマンドライン引数と引数の値の数を提供します。 これで、あなたが望むものを達成することができます。

#include <iostream> 

int main(int argc, char* argv[]) 
{ 
    std::cout << "The name used to start the program: " << argv[ 0 ] 
    << "\nArguments are:\n"; 
    for (int n = 1; n < argc; n++) 
     std::cout << n << ": " << argv[ n ] << '\n'; 
    return 0; 
} 

詳細については、例えばcppreference - main functionとする。これは、「プログラムの名前は」空の文字列ができること、例えば、説明しています

ARGV [0]使用される名前を表し、NULLで終了 マルチバイト文字列の最初の文字へのポインタでありますプログラムを起動する 自体(または空の文字列「」これは 実行環境でサポートされていない場合)

+1

Caveat: 'std :: cout <<"プログラムを起動するために使われる名前: "<< argv [0]"は完全に真ではありません。 'argv [0]'がありますが、空白のままにしておくことができます。 – user4581301

+0

@ user4581301:それを指摘してくれてありがとう。それに応じて答えを適応させた。 –

0

あなたはそれが主に行わ持っています。あなたはあなたのメインの悪い署名してい

  1. - int main(int argc, char** argv) または int main(int argc, char* argv[])
  2. ことSHOLDあなたが同じ引数でmenu1menu2menu3を初期化しようとする理由を私は理解していません。

今後の使用のために、ファイルのパスをstd::vector<std::string>に保存することができます。

#include <string> 
#include <vector> 

int main(int argc, char** argv) 
{ 
    std::vector<std::string> filePaths; 
    for (int i = 1; i < argc; ++i) { 
     filePaths.emplace_back(argv[i]); 
    } 

    //... 

    return 0; 
} 
関連する問題