2011-07-28 14 views
2

私はCで配列を修正するのに少し問題があります。私は2つの配列c1とc2を持っています。Cのchar配列?

配列c2を手動で入力するには、配列c1という単語を入力します。ユーザーは手紙を入力し、この手紙がc1で見つかった場合、プログラムはc2の適切な場所にこの手紙を修正します。手紙がc1に属していない場合は、何もしません。それはちょうど "言葉を推測する"ゲームのようなものです。

c1 = MARRON 

c2: ****** 
Type a letter: E 


c2: ****** 
Type a letter: A 


c2: *A**** 
Type a letter: O 


c2: *A**O* 
Type a letter: P 


c2:*A**O* 
Type a letter: M 


c2: MA**O* 
Type a letter: N 


c2: MA**ON 
Type a letter: R 

c2: MARRON 

You win. 

私のコードは実際に上記のスケッチに従っていません。私の問題は、アスタリスクと文字を適切なタイミングで印刷することです。私はまた、プログラムが末尾の文字'\0'をアスタリスクに置き換えても、それを防ぐための条件を保持していてもわかりました。ここに 」私のコード:

void complete(char *c2, char c1[], int letter) { 
    int i = 0; 
    for(i = 0; i < strlen(c1) - 1; i++) 
     if(c1[ i ] == '\0') { 
      c2[ i ] = '\0'; 
     } 
     else if(letter != c1[ i ] && c2[ i ] != '*'); 



     else if (letter == c1[ i ]) { 
      c2[ i ] = letter; 
      c2[ i + 1 ] = '\0'; 
     } 
     else if (letter != word[ i ]) 
      c2[ i ] = '*'; 
    c2[ i + 1 ] = '\0'; 
} 

int main(){ 
    char c1[] = "ORANGE"; 
    int length = strlen(c1); 

    char *c2 = NULL; 
    c2 = malloc(length * (sizeof(c1)); 

    while(1){ 
     printf("What is the secret word?: "); 
     printf("%s\n", c2); 
     printf("Propose a letter: "); 
     letter = lirecaracter();//it just reads a character 

     char *suite = NULL; 
     suite = strchr(c1, letter); 
     if(suite != NULL){ 
      complete(c2, c1, letter); 
     } 

     if(strcmp(c1, c2) == 0){ 
      printf("\n You won, congrats\n"); 
      exit(0); 
     } 

    } 

} 

感謝。

+1

はこの宿題ですか?あなたはそのようにタグ付けする必要があります –

+0

ifの前にelseを使用している最初のループが奇妙ですか?またstrlenは実際には-1の必要のない文字列の正しい長さを返します – Pepe

+0

@andreas:いいえ宿題ではありません – mkab

答えて

7

擬似コード:

WordGuessGame(target[1..n], buffer[1..n], input[1..m]) 
    1. for i := 1 to n do 
    2. buffer[i] := '*' 
    3. print buffer 
    4. for i := 1 to m do 
    5. for j = 1 to n do 
    6.  if target[j] = input[i] then 
    7.   buffer[j] := input[i] 
    8. if buffer = target then 
    9.  print "You win!" 
    10.  return 
    11. else print buffer 
    12. print "You lose..." 
+0

Phew。私はついにあなたのコードを理解しました。ご協力いただきありがとうございます。 – mkab

0

宿題のためのソリューションは、のような非常に簡単です:

int main(){ 
    char *p,c,*c1 = "ORANGE", c2[]="******"; 

    while(puts(c2),strcmp(c1,c2)) 
    { 
     printf("Propose a letter: "); 
     c=getchar(); while(getchar()!='\n'); 
     p=c1; 
     while(*p) 
     if(*p++==c) c2[p-c1-1]=c; 
    } 

    printf("\n You won, congrats\n"); 
    return 0; 
}