2017-02-18 311 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]的指針到一個空終止 多字節串的初始字符表示該名稱調用程序 本身(或一個空字符串「」如果這不是由 執行環境支持)

+1

警告:'std :: cout <<「用於啓動程序的名稱:」<< argv [0]'並不完全正確。會有一個'argv [0]',但它可能留空。 – user4581301

+0

@ user4581301:謝謝你指出。相應地修改了答案。 –

0

你明白了大部分完成。

  1. 你有你的主要的壞標記 - 這應和 int main(int argc, char** argv)int main(int argc, char* argv[])
  2. 我不明白爲什麼你嘗試初始化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; 
}