【问题标题】:char arrays in C?C中的字符数组?
【发布时间】: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 但我仍然有同样的问题。
  • 如果您希望人们帮助您,请对代码的糟糕格式做一些事情。

标签: c arrays char


【解决方案1】:

伪代码:

  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..."

【讨论】:

    【解决方案2】:

    您的家庭作业的解决方案非常简单,例如:

    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;
    }
    

    【讨论】:

      猜你喜欢
      • 2011-10-25
      • 1970-01-01
      • 2013-08-16
      • 2014-10-23
      • 2017-08-31
      • 2011-01-22
      相关资源
      最近更新 更多