使用C中的if / else语句的命令行参数

时间:2016-03-24 18:58:45

标签: c if-statement struct command-line-arguments

我是编程新手,这让我感到困惑。

我正在编写一个由mah调用的函数,该函数接受命令行参数并将它们存储在main中以供稍后使用。此特定示例用于图像编辑,但可以在任何地方使用。

期望的性能:函数从命令行获取参数。确定并检查了三个具体参数:struct-h-o。如果存在,他们将改变-t值。参数struct-o将紧随其后的参数存储到各自的-t字段中。任何非struct或前面没有-h-o的参数都被认为是输入文件名并存储在-t中。如果考虑了所有参数,那么flag->inputFile应该保持flag->inputFile并且可以在主函数中进行测试,如果这是真的则程序终止。

问题:如果没有指定输入文件(使用上述参数),NULL在作为参数包含时会一直设置为flag->inputFile

解决方案:感谢Scott,通过用-o替换多个if语句已经解决了这个问题,现在似乎解决了问题,并且该功能似乎正在运行如预期的。 我对正在发生的事情的理解是else if语句在else的每次迭代中运行,除非包含i参数,因为它是-t之前的语句}

我正在使用的编译器是gcc,这是我的代码。 (我知道我的结构没有包装,我仍然试图解决这个问题,看不出它会如何导致我看到的。分段错误,是的,但不是吗?)

else

我为这个问题的第一个版本的糟糕格式道歉,并希望这个编辑更好。我已经使函数的期望结果和我遇到的问题更加清晰,并删除了我通过代码获得的大多数测试打印并添加了一些注释。我还包括我的问题的解决方案(由另一个用户提供)和我对破坏的代码中发生的事情的理解。

如果人们仍然认为这是一个糟糕的问题,或者对其他人没有用处,那么我很乐意将其删除,但是已经编辑并将其留下来希望它可以帮助其他人。

这是我关于堆栈溢出的第一篇文章,感谢大家的帮助和耐心,同时我学习了编码和发布问题的最佳方式。

1 个答案:

答案 0 :(得分:1)

每当flag->inputFile = arg不是arg时,"-t"设置else"-t"后测试arg)。我不确定你什么时候想要分配给这个领域,但我确信这不是正确的逻辑。例如,如果您想在if ... else if ... else if ... else不是您要查找的其他特定标志时执行此操作,则应使用JOIN