【问题标题】:Command Line input c++ [duplicate]命令行输入c ++ [重复]
【发布时间】:2013-12-12 01:34:16
【问题描述】:

我知道当我写的时候:

int main (int argc, char *argv[])
{

  return 0;
}

我可以获取命令行输入(例如文件)以从中读取输入。但是,当编译后会给出输入文件时,我该怎么办。我的意思是假设输入文件 inputFile.txt 的名称和我的代码存储在 main.cpp 中。我会跟进的。

g++ main.cpp -o main
./main inputFile.txt

为了能够得到inputFile.txt,我该怎么做?

【问题讨论】:

  • 从args获取文件名,查看文件是否存在,打开文件,获取内容,获利
  • @afuzzyllama main(int argc,char *argv[] ) 在这种情况下是否足以获取输入文件?
  • 这可能会有所帮助:stackoverflow.com/questions/3024197/…
  • char *pszFileName = argv[0](或者在某些情况下可能是argv[1])。如果没有足够的参数(通过检查argc)来处理。
  • @caesar 问另一个问题。 (以及当您检查重复项时)即:读取 C++ 文件(已知文件名)

标签: c++ command-line-arguments argv


【解决方案1】:

argc 存储参数的数量。 argv 是一个参数数组。

argv[0] 将是程序名称(如果有)。见:Is "argv[0] = name-of-executable" an accepted standard or just a common convention?

如果您只传递一个参数,则可以使用argv[1](您的输入文件名)来执行您需要的任何操作。

请查看What does int argc, char *argv[] mean?了解更多信息。

【讨论】:

  • 试着记住什么时候 argv[0] 是第一个实际参数,什么时候 argv[1] 是...
  • argv[0] 是程序名称。 argv[1] 是第一个参数。
  • @MikeSeymour 除非它不是 :-) 顺便说一句,这可能是另一种语言......我漂浮了两次......
  • 仅当名称可用时。见:stackoverflow.com/questions/2050961/…
  • 不,如果argc > 0argv[0] 始终是程序名称。如果程序没有名称,则 argv[0][0] == '\0'(即argv[0] 是一个空字符串)。但是argv[0] 绝不是传递给程序的参数。 argv[1] 始终是传递给程序的第一个参数。
【解决方案2】:

你有两个选择。

在您输入的情况下,字符串“inputFile.txt”将在 argv[1] 中(arv[0] 是您的实际命令)。然后,您可以使用您的操作系统来读取此文件。

可能更简单的是使用重定向;即将命令行更改为“./main

第一种方法(或编写支持这两种方法的程序)将更适合商业应用,但第二种方法将用于学习目的。

【讨论】:

    【解决方案3】:

    在伪代码中:

    foreach(argv) {  
        if(argv exists)  
        open filehandle;   
        do stuff  
    } else {  
        printf "Your file does not seem to exist";  
    }
    

    【讨论】:

      猜你喜欢
      • 2014-03-29
      • 2014-04-23
      • 2013-04-08
      • 1970-01-01
      • 2010-12-19
      • 1970-01-01
      • 1970-01-01
      • 2020-04-11
      • 2018-11-04
      相关资源
      最近更新 更多