我在修改C中的数组时遇到一些问题.我有两个数组,c1和c2.
我想c2通过输入单词array c1contains 手动填充数组.用户键入一个字母,如果在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.
Run Code Online (Sandbox Code Playgroud)
我的代码并没有真正遵循上面的草图.我的问题是在合适的时间打印星号和字母.我还发现程序用'\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 );
}
}
}
Run Code Online (Sandbox Code Playgroud)
谢谢.
伪代码:
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..."
Run Code Online (Sandbox Code Playgroud)