2015-07-12 78 views
-5

「Simon Says」是一個記憶遊戲,其中「Simon」輸出一個由10個字符組成的序列(R,G,B,Y),用戶必須重複該序列。創建一個for循環,比較從索引0開始的兩個字符串。對於每個匹配,向userScore添加一個點。如果不匹配,請使用break語句退出循環。Break and Continue(C)

實施例:下面的圖案得到的4 userScore:

simonPattern:R,R,G,B,R,Y,Y,B,G,Y

userPattern:R,R, G,B,B,R,Y,B,G,Y

#include <stdio.h> 
#include <string.h> 

int main(void) { 
    char simonPattern[50] = ""; 
    char userPattern[50] = ""; 
    int userScore = 0; 
    int i = 0; 

    userScore = 0; 
    strcpy(simonPattern, "RRGBRYYBGY"); 
    strcpy(userPattern, "RRGBBRYBGY"); 

    while (userPattern[i] = simonPattern[i]) { 
     userScore = userScore + 1; 
     ++i; 
     if (userPattern[i] != simonPattern[i]) { 
     break; 
     } 
    } 

    printf("userScore: %d\n", userScore); 

    return 0; 
} 

我試圖運行的代碼,而是我得到這個

http://i.imgur.com/T7srTbb.png

有誰知道是什麼原因導致額外的1?

謝謝。

+0

'while(userPattern [i] = simonPattern [i]){'用'=='替換'='。 'if(userPattern [i]!= simonPattern [i]){'不是必需的 – fukanchik

+0

您是否試過用調試器單步執行代碼或添加一些'printf'語句來查看主循環中發生了什麼? – GWW

+2

[提問作業幫助的問題必須包括您迄今爲止解決問題所做的工作摘要,以及您解決問題的難點描述。](http://stackoverflow.com/help/on -topic) – David

回答

0

更改while循環中的條件以使用==而不是=。現在你正在做一個任務,而不是比較這兩個含義,第一個字符總是相同的,並給出1的分數。然後你可以從循環中刪除if語句。

該任務會要求您使用for循環,而不是一會兒。如果您只是將我移動到for循環並填寫其餘部分,並將增量移動到!=檢查後,它將起作用。

0
while (simonPattern.at(i) == userPattern.at(i)) 
{ 
++i; 
++userScore; 
} 
+2

請不要在這裏粘貼你的代碼 - 考慮提供一些解釋 – Zakir