我不知道为什么出现这个错误
问题描述:
我犯了一个代码为C印花矩阵:我不知道为什么出现这个错误
int main(int argc, char** argv) {
int i,j,columna,n,m;
char sala_cine[X][Y];
sala_cine[X][Y]=
{
{' ',1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20},
{'1',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '},
{'2',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '},
{'3',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '},
{'4',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '},
{'5',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '},
{'6',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '},
{'7',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '},
{'8',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '}
};
for (i=0;i<X;i++){
for(j=0;j<Y;j++)
printf("%c",sala_cine[X][Y]);
printf("\n");
}
return (EXIT_SUCCESS);
}
和sala_cine[X][Y]=
排在它出现了这个错误:
expeted expression before '{' token.
灿你帮我解决了这个问题?
谢谢
答
你不能像这样在C中指定一个数组。但是,在你的情况,你可以在声明初始化:
int main(int argc, char** argv) {
int i,j,columna,n,m;
char sala_cine[X][Y] =
{
{' ',1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20},
{'1',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '},
{'2',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '},
{'3',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '},
{'4',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '},
{'5',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '},
{'6',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '},
{'7',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '},
{'8',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '}
};
for (i=0;i<X;i++){
for(j=0;j<Y;j++)
printf("%c",sala_cine[i][j]);
printf("\n");
}
return (EXIT_SUCCESS);
}
此外,for循环打印了错误的@Eugene指出
答
随着C11,代码可以分配到字面一个sala_cine
化合物,它是现在是一个指针。
sala_cine = (char [X][Y]) { ... } // see below
注:在打印(char)
将打印控制字符,而不是数字'1'
。
#define X 9
#define Y 21
int main(void) {
int i,j;
char (*sala_cine)[Y];
sala_cine = (char [X][Y])
{
{' ',1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20},
{'1',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '},
{'2',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '},
{'3',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '},
{'4',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '},
{'5',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '},
{'6',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '},
{'7',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '},
{'8',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '}
};
for (i=0;i<X;i++){
for(j=0;j<Y;j++)
// printf("%c",sala_cine[X][Y]);
// Change from X,Y to i,j;
printf("%c",sala_cine[i][j]);
printf("\n");
}
return (EXIT_SUCCESS);
}
答
在C中,你不能在一个步骤中声明一个数组,并在以后进行初始化。 (你尝试过做):
// WRONG
char sala_cine[X][Y]; // Declaration Step
sala_cine[X][Y]= { .... }; // Initialization Step
相反,你必须马上做:
// Correct
char sala_cine[X][Y] = { .....}; // Declaration and Initialization at once.
要打印'sala_cine [i] [j]',不'sala_cine [X] [Y]'。我希望你有你的'X,Y'定义。 –
您正在混合'char'和'int'值:''1''是显示一个字符的字符,'1'是一个特殊字符而不是字符。 –