我是一名业余爱好者,我的任务是编写一个接受命令行参数的程序,其中一个必须是字符“N”或字符“A”。这是我认为可以有效运作的方法:
//check argv[2], valid should be 1 at this point if argv[1] is an integer
printf("Valid is currently: %d, valid);
printf("The second argument is: %s, argv[2]);
if(argv[2] != "N" && argv[2] != "A") { valid = 0; }
printf("Valid is currently: %d, valid");
给定输入./a.out 4 A
,并在给定的if语句之前和之后使用printf
语句,我实现了以下输出:
Valid is currently: 1
The second argument is: A
Valid is currently: 0
我认为只有当argv [2]不是“N”或“A”时,这才会有效地使有效无效位无效,但它不起作用。然后我尝试在类似的代码段中使用strcmp
,以获得不成功的结果。
这是我在C中的第一次承诺,所以请保持温和,但我已尝试使用"
而不是'
更改strcmp
到!=
的所有内容,甚至使用atoi
,虽然我不知道我是否正确使用它。是否存在C字符串输入或比较中固有的东西我不理解?
答案 0 :(得分:3)
要将其作为字符串进行比较,请尝试:
if (strcmp(argv[2], "N") != 0 && strcmp(argv[2], "A") != 0)
// can be reduced to:
if (strcmp(argv[2], "N") && strcmp(argv[2], "A"))
或者您也可以将其作为单个字符进行比较:
if (argv[2][0] != 'N' && argv[2][0] != 'A')
但这可能不是那么多才多艺。