moh*_*ndy 0 c printf runtime-error runtime char
我正在尝试获取数组中某些字符的位置.我在下面使用此代码,但在我输入两个字符后,我遇到了运行时错误.
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
int main()
{
char board [8][8]={{0}};
char kr,kc,qr,qc,nr,nc;
unsigned char i,j;
for (i = 0; i < 8 ;i++)
{
for (j = 'A'; j <= 'H'; j++)
{
board[i][j] = getche();
}
}
for (i = 0; i < 8 ;i++)
{
for (j = 0; j < 9; j++)
{
if (board[i][j] == 'K')
{
kr = i;
kc = j;
}
else if (board[i][j] == 'Q')
{
qr = i;
qc = j;
}
else if (board[i][j] == 'N')
{
nr = i;
nc = j;
}
}
}
printf("Q = %i %c K = %i %c N = %i %c",qr,qc,kr,kc,nr,nc);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
当我改变的类型i和j到unsigned int,程序运行,但打印错误的价值观和后刊出运行时错误.
在典型的环境中,'A'远远超过7(例如,ASCII代码为65),访问board[i]['A']将导致超出范围的访问,从而调用未定义的行为.不要访问(不读或写)超出范围.你也不能访问board[i][8].双方的for使用循环j的循环变量是错误的.
试试这个:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
int main(void) /* use one of standard signatures */
{
char board [8][8]={{0}};
char kr=0,kc=0,qr=0,qc=0,nr=0,nc=0; /* initialize to avoid using indeterminate values */
unsigned char i,j;
for (i = 0; i < 8 ;i++)
{
for (j = 0; j < 8; j++) /* correct range */
{
board[i][j] = getche();
}
}
for (i = 0; i < 8 ;i++)
{
for (j = 0; j < 8; j++) /* correct range */
{
if (board[i][j] == 'K')
{
kr = i;
kc = j;
}
else if (board[i][j] == 'Q')
{
qr = i;
qc = j;
}
else if (board[i][j] == 'N')
{
nr = i;
nc = j;
}
}
}
printf("Q = %i %c K = %i %c N = %i %c",qr,qc,kr,kc,nr,nc);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
请注意,范围0到7中的值不是ASCII代码中的可打印字符,因此最后一个printf()可能会产生您不想要的内容.