在for循环中创建一个字符数组

时间:2013-12-19 18:43:57

标签: c arrays

我是C的新手,正在测试它的一些功能。 当我尝试在for循环中创建一个字符数组时,我会收到错误。

int i,j;
//Fixed
char fila0[11] = {' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '};
char fila1[11] = {' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '};
char fila2[11] = {' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '};
char fila3[11] = {' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '};
//The problem
char fila0[11],fila1[11],fila2[11],fila3[11];

for (i = 0; i<4; i++){
    for(j = 0; j<11; j++){
      switch(j){
      case 0:
         fila0[j] = struct_juego.tablero[i][j];
      break;
      case 1:
         fila1[j] = struct_juego.tablero[i][j];
      break;
      case 2:
         fila2[j] = struct_juego.tablero[i][j];
      break;
      case 3:
         fila3[j] = struct_juego.tablero[i][j];
      break;
      }
    }
} 

fila0现在充满了奇怪的字符,它们不是数组字符 如果我打印fila0我得到了这个

 ๗ ๘ ๙ ๚ 8∆ ∏

2 个答案:

答案 0 :(得分:0)

以下是显示每一步输出的示例:

#include <stdio.h>
#include <stdlib.h>

int main (void) {
  int i, j;
  char hi[11];
  char array[9][11]; //---- need to declare type.                                                                                                        

// Before initialization                                                                                                                               
  fprintf(stdout, "Before initialization, array contains: \n");
  for (i = 0; i < 9; i++) {
    for (j = 0; j < 11; j++)
      fprintf(stdout, "%c ", array[i][j]);
    fprintf(stdout, "\n");
  }

  fprintf(stdout, "Before initialization, hi contains: \n");
  for (j = 0; j < 11; j++)
    fprintf(stdout, "%c ", hi[j]);
  fprintf(stdout, "\n");

  for (j = 0; j < 11; j++) { // ----- initalize array.  Initializing hi also, to show difference later.                                                  
    hi[j] = 'a';
    for (i = 0; i < 9; i++)
      array[i][j] = 65 + i;
  }
// After initialization                                                                                                                                
  fprintf(stdout, "initialized array contains: \n");
  for (i = 0; i < 9; i++) {
    for (j = 0; j < 11; j++)
      fprintf(stdout, "%c ", array[i][j]);
    fprintf(stdout, "\n");
  }

  fprintf(stdout, "initialized hi contains: \n");
  for (j = 0; j < 11; j++)
    fprintf(stdout, "%c ", hi[j]);
  fprintf(stdout, "\n");

  for (i = 0; i < 9; i++) {
    for (j = 0; j < 11; j++) {
      hi[j] = array[i][j];
    }
  }

// After copying                                                                                                                                         
  fprintf(stdout, "After copying, array contains: \n");
  for (i = 0; i < 9; i++) {
    for (j = 0; j < 11; j++)
      fprintf(stdout, "%c ", array[i][j]);
    fprintf(stdout, "\n");
  }

  fprintf(stdout, "After copying,  hi contains: \n");
  for (j = 0; j < 11; j++)
    fprintf(stdout, "%c ", hi[j]);
  fprintf(stdout, "\n");

  return 0;
}

答案 1 :(得分:-1)

缺少初始化。 而不是做:

char fila0[11] = {' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '};
char fila1[11] = {' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '};
char fila2[11] = {' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '};
char fila3[11] = {' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '};

做的:

int len = 10;
char fila0[len];
char fila1[len];
char fila2[len];
char fila3[len];

for (int i=0; i<11; i++) {
    fila0[i] = ' ';
    fila1[i] = ' ';
    fila2[i] = ' ';
    fila3[i] = ' ';
}

这样每个人都可以初始化,如果你想改变矢量大小,它会更实用。