一次输出许多字符(包括 ASCII)?
output many chars (including ASCII) at once?
伙计们,我正在开发一个需要输出二维 int
数组的程序(我将其设为 int
数组,因为我在其他一些地方使用这些值点)。在我的第一次尝试中,我尝试为 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 and 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++ 我没有得到任何错误,但输出完全不是它应该的。有什么想法吗?
试试这个:
void printField()
{
int i,j;
int n = 0;
char toPrint[52*(142+1)+1];
system("CLS");
for (i=0; i<52; i++)
{
for (j=0; j<142; j++)
{
switch (field[i][j])
{
case 0: toPrint[n++] = ' '; break;
case 9: toPrint[n++] = 219; break;
case 2: toPrint[n++] = 219; break;
case 1: toPrint[n++] = ' '; break;
case 6: toPrint[n++] = ' '; break;
case 7: toPrint[n++] = 207; break;
}
}
toPrint[n++] = '\n';
}
toPrint[n] = '[=10=]';
printf("%s\n",toPrint);
}
抱歉,您的代码中有很多错误,所以我不得不将其重写为:
void printField(){
int i,j;
char toPrint[10000];
char* current = toPrint; // pointer to beginning of char array
system("CLS");
for(i=0; i<52; i++) {
for(j=0; j<142; j++) {
if(field[i][j]==0){
*current++ = ' ';
}
if(field[i][j]==9){
*current++ = '\xDB';
}
if(field[i][j]==2){
*current++ = '\xDB';
}
if(field[i][j]==1){
*current++ = ' ';
}
if(field[i][j]==6){
*current++ = ' ';
}
if(field[i][j]==7){
*current++ = '\xCF';
}
}
*current++ = '\n';
}
*current = '[=10=]';
puts(toPrint);
}
编辑: 修复了错误的字符
伙计们,我正在开发一个需要输出二维 int
数组的程序(我将其设为 int
数组,因为我在其他一些地方使用这些值点)。在我的第一次尝试中,我尝试为 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 and 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++ 我没有得到任何错误,但输出完全不是它应该的。有什么想法吗?
试试这个:
void printField()
{
int i,j;
int n = 0;
char toPrint[52*(142+1)+1];
system("CLS");
for (i=0; i<52; i++)
{
for (j=0; j<142; j++)
{
switch (field[i][j])
{
case 0: toPrint[n++] = ' '; break;
case 9: toPrint[n++] = 219; break;
case 2: toPrint[n++] = 219; break;
case 1: toPrint[n++] = ' '; break;
case 6: toPrint[n++] = ' '; break;
case 7: toPrint[n++] = 207; break;
}
}
toPrint[n++] = '\n';
}
toPrint[n] = '[=10=]';
printf("%s\n",toPrint);
}
抱歉,您的代码中有很多错误,所以我不得不将其重写为:
void printField(){
int i,j;
char toPrint[10000];
char* current = toPrint; // pointer to beginning of char array
system("CLS");
for(i=0; i<52; i++) {
for(j=0; j<142; j++) {
if(field[i][j]==0){
*current++ = ' ';
}
if(field[i][j]==9){
*current++ = '\xDB';
}
if(field[i][j]==2){
*current++ = '\xDB';
}
if(field[i][j]==1){
*current++ = ' ';
}
if(field[i][j]==6){
*current++ = ' ';
}
if(field[i][j]==7){
*current++ = '\xCF';
}
}
*current++ = '\n';
}
*current = '[=10=]';
puts(toPrint);
}
编辑: 修复了错误的字符