2016-07-07 77 views
0

我是編程新手,並且有一個練習,我在其中創建一個函數來檢查char類型的數組是否保存特定值。 這裏是我的功能:函數檢查字符類型的值

bool arrCheck(char n[],char pos1,char pos2,char pos3,int size) 
{ 
    int n1,n2,n3; 
    for (int i=0;i<size;i++) 
    { 
     if (n[i]==pos1) 
     { 
      n1=1; 
     } 
     if (n[i]==pos2) 
     { 
      n2=1; 
     } 
     if (n[i]==pos3) 
     { 
      n3=1; 
     } 
    } 
    if ((n1==1)&&(n2==1)&&(n3==1)) 
    { 
     return true; 
    } 
} 

這裏是我的測試程序:

int main() 
{ 
    char a[5]={'6','1','a','a','a'}; 
    if (arrCheck(a,'1','6','9',5)) 
    { 
     cout<<"true\n"; 
    } 
} 

我想結果應該是假的,但我的一切是真的。我做錯了什麼?

回答

0

該代碼是正確的。你只是忘了添加一些語句,這導致了錯誤(它可能會或可能不會愚蠢)。

您對函數arrCheck()的定義不完整。如果某個條件滿足,它將返回true,但如果不滿足條件?在這種情況下,您必須返回false。但在你的代碼中,false永遠不會返回。所以,首先你得最後if聲明中arrCheck()方法這後面加一個else聲明:

if((n1==1)&&(n2==1)&&(n3==1)){ 
    return true; 
} 
else{ 
    return false; //this has to be added 
} 

如果遇到這樣的情況下,它現在可以返回false
另外,如果arrCheck()返回false,則必須在主要方法中顯示「false」。建議您在main()方法中的if語句之後添加else語句。看到下面的修改:

if (arrCheck(a,'1','6','9',5)) 
{ 
    cout<<"true\n"; 
} 
else{ 
    cout<<"false\n"; //it must show false; 
} 

一旦你糾正這些,你的代碼將產生正確的輸出。


P.S.這個答案可以用來解釋之前由@KUSHAGRA GUPTA提交的答案。

1

n1,n2n3是默認初始化的,它們首先具有不確定的值。在檢查它們的值之前初始化它們。即使條件不成立,也不要忘記返回一些東西。

試試這個:

bool arrCheck(char n[],char pos1,char pos2,char pos3,int size) 
{ 
    int n1=0,n2=0,n3=0; 
    for (int i=0;i<size;i++) 
    { 
     if (n[i]==pos1) 
     { 
      n1=1; 
     } 
     if (n[i]==pos2) 
     { 
      n2=1; 
     } 
     if (n[i]==pos3) 
     { 
      n3=1; 
     } 
    } 
    return (n1==1)&&(n2==1)&&(n3==1); 
} 

使用bool存儲布爾值,並使用const來標記數組的內容將不會改變可能會更好。

bool arrCheck(const char n[],char pos1,char pos2,char pos3,int size) 
{ 
    bool n1=false,n2=false,n3=false; 
    for (int i=0;i<size;i++) 
    { 
     n1=n1||(n[i]==pos1); 
     n2=n2||(n[i]==pos2); 
     n3=n3||(n[i]==pos3); 
    } 
    return n1&&n2&&n3; 
} 
0
int n1,n2,n3; 

此行導致未定義行爲,因爲你不初始化變量,但試圖從他們後面,即使不是所有的人都被賦值爲:

if ((n1==1)&&(n2==1)&&(n3==1)) 

修復undefi斯內德行爲通過初始化變量,以0:

int n1 = 0; 
int n2 = 0; 
int n3 = 0; 

有未定義行爲的另一種情況,當你的功能並不說明什麼返回如果條件是不正確的。解決這個問題,太:

if ((n1==1)&&(n2==1)&&(n3==1)) 
{ 
    return true; 
} 
else 
{ 
    return false; 
} 

或者乾脆:

return (n1==1)&&(n2==1)&&(n3==1); 
0

改變該行喜歡這個。 int n1= 0,n2= 0,n3 = 0; 因爲當未初始化這些變量有垃圾值。

bool arrCheck(char n[],char pos1,char pos2,char pos3,int size) 
{ 
    int first = 0,second = 0, third = 0; 
    for (int i=0;i<size;i++) { 
     if (n[i]==pos1) { 
     first = 1; 
     } else if (n[i]==pos2) { 
      second = 1; 
     } else if (n[i]==pos3) { 
      third = 1; 
     } 
    } 

    if(first+ second + third == 3) 
     return true; 
    else 
     return false; 
} 
1

1)使用,而不是一個布爾變量由3個int變量
2)初始化(你還沒有初始化的int變量,他們有隨機的垃圾值)
3)同時添加其他條件返回false值(你的代碼沒有返回false)。
4)使用else條件也在主函數中打印false。
希望這可以幫助你..!