2012-12-11 31 views
-2

我有一個的strcmp函數像這樣:strcmp不工作?

if (strcmp(userInput, "Yes") == 0) 

出於某種原因,它不會if語句進入,儘管我相信肯定userinput等於是。任何人有任何線索最新錯誤?

+0

如何輸入'userInput'? –

+6

您可能從'fgets'獲得了您的用戶輸入,這會導致附加新行。 –

+0

你是如何得到'usrInput'的,那是什麼類型?需要更多信息 – Mike

回答

2

爲了避免troube有拖尾斷行,你也許可以只檢查前3個字符:

if(strncmp(userInput, "Yes", 3) == 0) 
+1

如果輸入是「YesASDASD」? –

+0

那麼,這將匹配太多,但取決於用例可能已經足夠了 – rekire

+0

它適用於我在strcmp沒有工作的地方,我想這是因爲一個字符串長度沒有明確定義。 –

2
  1. 確保您包括正確的頭,即<string.h>
  2. 如果您從例如userInput得到fgets(),確保在最後沒有行終止,它會干擾這樣寫的比較。
1

因爲你的代碼沒問題。這不是問題。

我懷疑你這樣做:

fgets(userInput, sizeof(userInput), stdin); 
if(strcmp(userInput, "Yes") == 0) 

這是給你換行字符:

['Y']['e']['s']['\n'] 

您可以修復任何數量的方式:

if(strcmp(userInput, "Yes\n") == 0) 

可能是最簡單的。或者你可以通過scaf得到輸入:

scanf("%s", userInput); 
0

如果你需要幫助,你可以輸入。

//I am assuming usrInput is a char Array 

string str(usrInput); 
//string class has a constructor that takes a NULL-terminated C-string 
if (str == "Yes") 
{ 
    //do what ever you wanted to in the loop 
} 
+0

This在C中不會成功 – chux