【发布时间】:2016-03-24 09:17:17
【问题描述】:
伙计们,我正在开发一个需要输出二维int 数组的程序(我将其设为int-array,因为我在其他点使用这些值)。在我的第一次尝试中,我尝试为 int 值打印正确的字符(包括 ASCII):
void printField(){
int i,j;
system("CLS");
for(i=0; i<52; i++) {
for(j=0; j<142; j++) {
if(field[i][j]==0){
printf(" ");
}
if(field[i][j]==9){
printf("%c",219);
}
if(field[i][j]==2){
printf("%c",219);
}
if(field[i][j]==1){
printf(" ");
}
if(field[i][j]==6){
printf(" ");
}
if(field[i][j]==7){
printf("%c",207);
}
printf("\n");
}
}
问题是,屏幕在闪烁,因为我必须非常快地打印该字段,并且它会一个接一个地打印一个字符。所以我开始研究(here 和 here 可能会有所帮助)并尝试通过一次打印出来来解决这个问题(使用strcat()):
void printField(){
int i,j;
char toPrint[10000];
system("CLS");
for(i=0; i<52; i++) {
for(j=0; j<142; j++) {
if(field[i][j]==0){
strcat(toPrint," ");
}
if(field[i][j]==9){
char temp[2];
temp[0]=char(219);
strcat(toPrint,temp);
}
if(field[i][j]==2){
char temp[2];
temp[0]=char(219);
strcat(toPrint,temp);
}
if(field[i][j]==1){
strcat(toPrint," ");
}
if(field[i][j]==6){
strcat(toPrint," ");
}
if(field[i][j]==7){
char temp[2];
temp[0]=char(207);
strcat(toPrint,temp);
}
}
strcat(toPrint,"\n");
}
printf("%s\n", toPrint);
}
使用 DEV-C++ 我没有收到任何错误,但输出完全不是应有的。有什么想法吗?
【问题讨论】:
-
输出是什么?应该是什么输出?
-
还可以在循环之前尝试在 toPrint 数组上使用函数 memset(),因为该数组中可能仍有垃圾字符。
-
如果你把它变成
char的数组,你仍然可以使用这些值。打印时,它会让您的生活更轻松。 -
ASCII 字符的编码从 0 到 127。
-
strcat要求第一个参数是有效的、以空字符结尾的字符串。你传递了一个充满垃圾的缓冲区。通过初始化char toPrint[n] = "";来解决这个问题。还要避免在堆栈上转储 10k 字节,否则可能会导致堆栈溢出。