私は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);
}
}
}
感謝。
はこの宿題ですか?あなたはそのようにタグ付けする必要があります –
ifの前にelseを使用している最初のループが奇妙ですか?またstrlenは実際には-1の必要のない文字列の正しい長さを返します – Pepe
@andreas:いいえ宿題ではありません – mkab