【发布时间】:2011-07-28 17:32:00
【问题描述】:
我在修改 C 中的数组时遇到了一点问题。我有两个数组,c1 和 c2。
我想通过键入数组c1 包含的单词来手动填充数组c2。用户键入一个字母,如果在 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 if? strlen 实际上也返回正确的字符串长度,不需要 -1
-
@andreas:不,这不是作业
-
@Peter R.:糟糕更改了代码。我试过 strlen -1 但我仍然有同样的问题。
-
如果您希望人们帮助您,请对代码的糟糕格式做一些事情。