在C中区分文件名和命令行输入?

在C中区分文件名和命令行输入?,c,C,我的程序实现了一个基本的扫描仪。它应该能够处理文件输入和用户通过命令行手动输入。我的问题是能够找出它是什么,这样我就可以适当地处理它。迄今为止的想法: 我可以假设在一个文件或一行标准输入中至少有一个空白字符。我想我可以检查argv[1]中是否有空白,如果没有空白,则假设它是一个文件名并打开该文件 或者,我可能会尝试使用检查文件是否存在,如果存在,则将其打开,否则将其作为命令行条目处理 有没有我错过的更简单的选择?这两个现有的想法中有一个比另一个更有效、更可靠吗?通常的方法是使用命令行选项 有些程

我的程序实现了一个基本的扫描仪。它应该能够处理文件输入和用户通过命令行手动输入。我的问题是能够找出它是什么,这样我就可以适当地处理它。迄今为止的想法:

  • 我可以假设在一个文件或一行标准输入中至少有一个空白字符。我想我可以检查
    argv[1]
    中是否有空白,如果没有空白,则假设它是一个文件名并打开该文件

  • 或者,我可能会尝试使用检查文件是否存在,如果存在,则将其打开,否则将其作为命令行条目处理


  • 有没有我错过的更简单的选择?这两个现有的想法中有一个比另一个更有效、更可靠吗?

    通常的方法是使用命令行选项

    有些程序需要一个“文件名”,但将
    -
    理解为
    stdin
    的意思,如果预期输入有多行,这一点很好

    有些程序要求将其参数放在命令行上,但将
    @FILE
    理解为应该打开并读取
    文件
    ,并将其全部内容展开,就像它们放在命令行上一样

    有些程序通常在命令行上获取参数,但也有从文件获取参数的方法,例如,
    awk-f file
    文件而不是命令行读取其命令

    一些程序通常采用包含命令的文件名,但也提供了一个明确的选项,例如,
    bash-c“echo hello”


    这只是对一些选项的快速调查;您需要决定哪一个最适合您的应用程序。您会注意到,它们都没有使用简单的猜测来确定某个东西是否是文件(例如,通过检查它是否存在);它们都非常明确(第一种方法是禁止使用名为
    -
    的文件,但什么动物会这样做?)

    注意,文件名中可能包含空格。控制台程序指示从标准输入中获取输入的典型方法是将
    -
    作为参数。例如,如果您的程序是
    myprogram
    ,则可以将其作为
    myprogram inputfile.dat
    调用,以处理
    inputfile.dat
    myprogram-
    中的输入,以指示输入应取自
    stdin
    。感谢您提供的有用建议。