gpt4 book ai didi

c - getche 函数中的运行时错误

转载 作者:太空宇宙 更新时间:2023-11-04 05:24:26 29 4
gpt4 key购买 nike

我正在尝试获取数组中某些字符的位置。我在下面使用这段代码,但在我只输入两个字符后出现运行时错误。

#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;
}

当我将 ij 的类型更改为 unsigned int 时,程序运行但打印错误值,打印后进入运行时错误。

最佳答案

在典型环境下,'A'远大于7(例如ASCII码为65),访问board[i]['A '] 将导致超出范围的访问,从而调用未定义的行为。不要访问(不读也不写)超出范围。您也不能访问 board[i][8]。使用j作为循环变量的for循环都是错误的。

试试这个:

#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;
}

请注意,0 到 7 范围内的值不是 ASCII 代码中的可打印字符,因此最后一个 printf() 可能会产生您不想要的结果。

关于c - getche 函数中的运行时错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37862836/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com