2013-04-08 83 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