从命令提示符读取文本文件

时间:2017-02-18 23:33:42

标签: c++ fstream ifstream ofstream

我希望能够从命令行读取文本文件。 所以我要做的是

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;  

}

}

2 个答案:

答案 0 :(得分: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。例如,它解释了程序的名称&#34;可能是一个空字符串:

  

argv [0]是指向以null结尾的初始字符的指针   多字节字符串,表示用于调用程序的名称   本身(或空字符串&#34;&#34;如果不支持   执行环境)

答案 1 :(得分:0)

你已经完成了它。

  1. 你的主人签名不好 - 那就是 int main(int argc, char** argv) 要么 int main(int argc, char* argv[])
  2. 我不明白您为什么尝试使用相同的参数初始化menu1menu2menu3
  3. 您可以将文件路径存储在某些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;
    }