如何让用户以任意顺序输入命令行参数?
How to let a user enter command line arguments in any order?
我必须编写一个 encrypt/decrypt C 程序并开始它需要 6 个 CL 参数。这对我来说通常没问题,但这次参数顺序无关紧要。标志也始终与参数类型匹配。例如。 -t 将始终在 csv 文件之前。
例如,以下都是 运行 程序的等效方法,并且会产生相同的行为:
./encrypt -t mappingfile.csv -m 1 -i words.txt
./encrypt -m 2 -i words.txt -t mappingfile.csv
./encrypt -m 1 -i words_to_encrypt.txt -t mappingfile.csv
我不确定如何检查这个,任何信息都有帮助!谢谢!
如果您不想使用其他库而宁愿自己处理所有事情,您会想要 运行 一个循环来处理所需的参数。
通常,如果您确定一个值会出现在一个参数之后,您可以这样做:
for( int i; i < argc; i++ ){
if( [ argument is equal to some tag ] ){
[ handle argument at args[i+1] ]
i++; // Skip the next arg
} else if ( [ argument is equal to next tag ] ) {
} // Use for any additional tags you need
}
您可以在处理参数之前添加检查以确保 i+1
不会通过 args 数组的边界。要检查参数是否相等,您可以使用 <string.h>
函数 strcmp()
或编写您自己的函数。
处理参数可以像将字符串复制到其他 char[]
数组一样简单,甚至可以记住所需参数的索引。这完全取决于你想如何使用它。
像这样遍历标签意味着您不需要它们按任何特定顺序排列。
--- 希望我的第一个 SA 回答还不错 :)
我必须编写一个 encrypt/decrypt C 程序并开始它需要 6 个 CL 参数。这对我来说通常没问题,但这次参数顺序无关紧要。标志也始终与参数类型匹配。例如。 -t 将始终在 csv 文件之前。
例如,以下都是 运行 程序的等效方法,并且会产生相同的行为:
./encrypt -t mappingfile.csv -m 1 -i words.txt
./encrypt -m 2 -i words.txt -t mappingfile.csv
./encrypt -m 1 -i words_to_encrypt.txt -t mappingfile.csv
我不确定如何检查这个,任何信息都有帮助!谢谢!
如果您不想使用其他库而宁愿自己处理所有事情,您会想要 运行 一个循环来处理所需的参数。
通常,如果您确定一个值会出现在一个参数之后,您可以这样做:
for( int i; i < argc; i++ ){
if( [ argument is equal to some tag ] ){
[ handle argument at args[i+1] ]
i++; // Skip the next arg
} else if ( [ argument is equal to next tag ] ) {
} // Use for any additional tags you need
}
您可以在处理参数之前添加检查以确保 i+1
不会通过 args 数组的边界。要检查参数是否相等,您可以使用 <string.h>
函数 strcmp()
或编写您自己的函数。
处理参数可以像将字符串复制到其他 char[]
数组一样简单,甚至可以记住所需参数的索引。这完全取决于你想如何使用它。
像这样遍历标签意味着您不需要它们按任何特定顺序排列。
--- 希望我的第一个 SA 回答还不错 :)