2013-04-08 86 views
1

我是一个业余爱好者,我的任务是编写一个程序,它接受命令行参数,其中一个必须是字符'N'或字符'A'。这是我认为会有效地工作的方法:字符比较输入在C

//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,并且使用printf语句之前和之后给定的if语句,我实现了以下的输出:

Valid is currently: 1 
The second argument is: A 
Valid is currently: 0 

我想这只会在argv [2]不是“N”或“A”时有效地使有效无效位无效,但它不起作用。然后我尝试在类似的代码片段中使用strcmp,结果不成功。

这是我在C首先事业,所以请温柔,但我已经试过一切从改变"',使用strcmp代替!=,甚至使用atoi,虽然我不知道如果我用它正常。 C字符串输入或比较中有什么内在的东西我不理解?

回答

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') 

但是,这可能不是多才多艺。

+1

不......他必须使用|| ..它不能是N和A在同一时间 – 2013-04-08 00:47:38

+0

@LewsTherin确实。感谢您提醒我我的错误。 – 2013-04-08 00:48:19

+0

@JorgeIsraelPeña工作,谢谢。不知道我怎么没有用strcmp自己打这个解决方案。我会在10分钟后尽快接受你的回答。 – aquemini 2013-04-08 00:50:25