2014-04-15 27 views
-1

我現在非常生氣。我需要比較一個字符串與第二個字符串時,第二個字符串可以創建第一個字符串。例如C-如果即使他應該也不會進入


foo1 =賬單

foo2的= boril

foo2的可以創建foo1,因爲它包含了從foo1所有的字母。


所以這是我的計劃:

祕密=宗教

lettersGuessed = religonvpst

for(i = 0; i < lenSecret; i++){ 
    for(l = 0; l < lenGuessed; l++) 
     printf("A: %c, B: %c, C: %d\n", secret[i], lettersGuessed[l], count); 
     if(secret[i] == lettersGuessed[l]){ 
      printf("HI\n"); 
      count++; 
      break; 
     } 
     printf("C: %d\n", count); 
} 

但變量計數始終保持在0。這是從控制檯輸出:

http://pastebin.com/YrHiNLNi

正如你可以直接從一開始看到的,當祕密[I] == lettersGuessed [1]如果應返回true(1),則返回false(0)。這有什麼問題?爲什麼它不起作用?

+1

嘗試使用['strcmp'](http://www.manpagez.com/man/3/strcmp/)比較字符串。 –

+0

與您的問題無關,但請注意,通常使用「l」作爲變量名稱,因爲根據字體,它可能很容易與I(大寫字母i)混淆。 –

+0

另外,您幾乎不應該使用標識符defau1t和defauIt作爲標籤。 –

回答

7

這是因爲你的第二個循環後沒有花括號。如果你沒有用花括號來包裝你想要迭代的代碼塊,那麼只有遇到的第一個分號之前的代碼纔會被執行。在這種情況下,你的第二個循環將迭代printf語句,但沒有別的。因此,當執行if語句時,變量l將始終等於lenGuessed,且第一個單詞的字母不會與第二個單詞的最後一個字母匹配,因此count永遠不會遞增。

+0

原始之一((I = 0;我 MatusMak

+0

嘗試爲兩個forloops添加大括號 – Nate

0

好吧,這是非常瘋狂的。

我在我的問題中發佈的代碼當然是錯誤的,因爲我忘記了循環的第二個括號。我知道,這是一個很小但致命的錯誤,但我非常生氣,所以我沒有注意。無論如何,原代碼如下:

int isWordGuessed(char secret[], char lettersGuessed[]){ 
    int i, l, count = 0; 
    int lenSecret = strlen(secret); 
    int lenGuessed = strlen(lettersGuessed); 

    for(i = 0; i < lenSecret; i++) 
     for(l = 0; l < lenGuessed; l++) 
      if(secret[i] == lettersGuessed[l]){ 
       count++; 
       break; 
     } 

return lenSecret == count ? 1 : 0; 

} 

起初,它返回0。使用不同的工具編譯它,並啓動它在兩個不同的操作系統(Windows 7 64位和Windows XP 32位)之後,我最終能夠從該功能中獲得1分。

看起來好像變量count在啓動時有非零值,所以不是int i,l,count;我寫了int i,l,count = 0;

好吧,現在我不明白只有一件事 - 爲什麼有時變量有非零值,即使我從來沒有碰過它們。它發生在我之前,但僅在C語言中,在其他語言中我從來沒有遇到過這樣的問題。

+0

如果您未初始化變量,則其值不可知。有一些例外(我相信C99要求所有聲明爲'static'的變量初始化爲'0'),但通常初始值可以是任何東西,並且可能只是垃圾留在堆棧中。 – rjp

+1

如果您有第二個問題,請發表第二個問題。不要發表問題的答案,這只是令人困惑,可能會被刪除。 –

相關問題