【问题标题】:Open file from command line and display what was typed从命令行打开文件并显示输入的内容
【发布时间】:2017-10-07 01:13:22
【问题描述】:

我试图从命令行只输入一个文件名。然后我想使用 If 语句将文件名与我期望看到的 4 个不同的名称进行比较。如果我没有得到 4 个预期的文件名之一,那么我需要将其与输入的内容一起打印回用户,然后安全退出程序。

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

我一直在尝试很多不同的方法来完成这项工作,但我就是想不通。我在想也许我接受输入参数的方式是错误的。任何帮助将不胜感激。

-编辑

我只是想明确一点,我不希望你成为一个水蛭并解决我的问题。至少为我指明正确的方向。我不知道如何使用文件名使 for 循环工作。

for(argv == "UnexpectedFile.csv"){
    printf("this is an unexpected file: %c", argv[1]);
}

【问题讨论】:

  • for() 语句应该看起来更像:`if( ( strcmp(argv[1], "UnexpectedFile.csv" ) && ,,,, ) 然后打印出失败消息
  • 您最终可以使用您预期的文件名初始化一个字符串数组,并使用for 对其进行迭代,并在其中添加一个if 语句以确定参数是否是这些文件名之一。

标签: c file-io command-line-arguments


【解决方案1】:

您可以使用string.h 中的strcmp() 来比较类似的字符串

strcmp(argv[1], "unexpectedfile.csv");

当字符串相等时返回0

如果你有 4 个文件名作为字符串数组,比如expectedFile,那么做

for(i=0; i<4 && strcmp(argv[1], expectedFile[i])!=0; ++i);

如果i 的值是此循环后的文件名总数(即4),则argv[1] 是意外文件。
否则,i 的值将是expectedFile 数组中文件名字符串的索引。

命令行参数存储在二维char 数组argv 中。

argv[0] 将是执行文件的名称。您给出的论点仅从argv[1] 开始。

argc 将具有命令行参数的总数包括存储在argc 中的文件名。因此,如果有“无”参数,argc 将是1。 在您的情况下,文件名是唯一的参数,因此 argc 将是 2

您必须在访问argv[1] 之前检查argc 是否至少为2,以防止程序在argv[1] 不存在时访问它。

【讨论】:

    【解决方案2】:

    (您不要求完整的代码解决方案(也没有为此提供足够的代码)。所以这里是您想要的正确方向的指针。)

    您使用简单的pointer == pointer 进行的比较并不能真正比较字符串的内容。这就是例如strcmp () 是由@user3629249 提议的。

    为了打印出作为命令行参数给出的内容,您应该使用"%s\n"

    为了设置 for 循环,您必须正确使用语法:for(init assignment; condition; step operation)

    (如果您需要更多帮助,您将必须提供更多关于您得到什么行为以及您不喜欢它的地方的详细信息。目前,您的代码看起来更像是编译器错误,您没有引用,而不是行为目标有问题...)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-07-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-22
      • 2021-03-01
      相关资源
      最近更新 更多