2013-12-12 42 views
0

我正在寫一個小遊戲,裏面有一個隱藏的單詞,用戶必須猜測,char到char,單詞是什麼。編碼時,我得到了一些東西,我不會在任何地方發生,也不會在其中發生。不存在雙重遞減?

while(true) 
{ 
    if(Hue == 0) 
     Try -= 1; 

    if(Hue == 1) 
     Hue = 0; 

    GotoXY(0, 3); 
    printf("Inserisci una lettera maiuscola\n>"); 
    GotoXY(1, 4); 
    scanf("%c", &Key); 
    GotoXY(0, 4); 
    printf("  "); 

    GotoXY(0, 6); 
    printf("Numero di tentativi rimasti: %d ", Try); 

    for(unsigned short Iterator = 1; Iterator < Length - 1; ++Iterator) 
     if(Key == UserString[Iterator]) 
     { 
      for(unsigned short SecIterator = Iterator; SecIterator < Length - 1; ++SecIterator) 
      { 
       if(Key == UserString[SecIterator]) 
       { 
        GotoXY(SecIterator, 1); 
        printf("%c", Key); 
       } 
      } 

      Hue = 1; 
      break; 
     } 
    } 

色調是一個簡單的控制變量來檢查密鑰是否在單詞中。 如果它仍然是0,那麼關鍵字不在該單詞中,所以Try將它自我遞減等等。

但是發生什麼是Hue,或者是0或者1會導致Try的減少,更重要的是當嘗試減少0時,嘗試減少兩次,在代碼中均勻地寫入不會像這樣寫。 感謝您的幫助。

+0

這些變量在哪裏聲明?所有這些變量是什麼類型? – nhgrif

+0

Hue和Try是兩個unsigned short,UserString是char * – EnryFan

+0

@nhgrif:哪些約定? –

回答

1

看來混亂主要是由於雙遞減:好,您正在閱讀char s,最有可能你打回做兩個char的可用:輸入的字符和'\n'從返回。既然顯然沒有字符匹配,你會得到兩個減量。

只是有點解釋:當使用格式化輸入時使用std::cin >> Key跳過前導空格。當使用scanf("%c", &c)時,每個字符被提取。我認爲你可以使用scanf()

if (1 == scanf(" %c", &c)) { 
    // process the input 
} 

注意在「%C」前面的額外空間跳過前導空格。爲了調試這樣的問題,打印讀取內容通常是一個好主意。 ...當然,你總是需要驗證讀取是否成功。

+0

使用'std :: cin >> Key'而不是'scanf'應該可以緩解這個問題。 – blackbird

+0

@blackbird用'cin'代替'scanf'確實有效!謝謝 – EnryFan