C 分段错误,我的代码中缺少什么?
我正试图让我的代码将一个包含3列的文本文件xcoor、ycoor和一个包含2个字符的符号转换为一个30x30的映射,该映射打印符号的第2个字符,其余的空格用“.”填充。但是,我的代码似乎没有运行,并且我在尝试输入文本文件时出现了一个分段错误,我做错了什么?提前谢谢C 分段错误,我的代码中缺少什么?,c,C,我正试图让我的代码将一个包含3列的文本文件xcoor、ycoor和一个包含2个字符的符号转换为一个30x30的映射,该映射打印符号的第2个字符,其余的空格用“.”填充。但是,我的代码似乎没有运行,并且我在尝试输入文本文件时出现了一个分段错误,我做错了什么?提前谢谢 int main(void) { char grid[30][30]; for(int i=0;i<30;i++){ for(int j=0;j<30;j++){ grid[i][
int main(void)
{
char grid[30][30];
for(int i=0;i<30;i++){
for(int j=0;j<30;j++){
grid[i][j]='.';
}
}
int xcoor,ycoor;
char symbol[2];
while((xcoor!=0)||(scanf("%d",&xcoor)))
{
while(xcoor==0){
scanf("%d",&xcoor);
}
scanf("%d %c%c",&ycoor,&symbol[0],&symbol[1]);
grid[xcoor-1][ycoor-1]=symbol[1];
}
for(int i=0;i<30;i++){
for(int j=0;j<30;j++){
printf("%c ",grid[i][j]);
}
printf("\n");
}
return 0;
}
int main(无效)
{
字符网格[30][30];
对于(int i=0;i这可能不包括您的所有错误,但我立即看到:
int xcoor,ycoor;
char symbol[2];
while((xcoor!=0)
你认为xcoor
现在有一个有效值吗?应该吗?因为它没有。你已经创建了一个变量,然后在实际设置它之前,你要检查它的值
很可能是您的scanf
呼叫给您带来了麻烦。无论如何,请尝试实际设置这些变量。这很可能会解决您的问题
有关更多信息,请参见此处:您正在while
语句的条件中使用未初始化的变量xcoor
您可以通过初始化xcoor
来解决这个问题
更重要的是,您可以简化读取用户数据和相关错误检查的代码。以下是我的建议:
while ( scanf("%d%d %c%c", &xcoor, &ycoor, &symbol[0], &symbol[1]) == 4 )
{
if ( xcoor < 0 || xcoor >= 30 )
{
// Deal with problem.
fprintf(stderr, "Out or range value of xcoor: %d\n", xcoor);
exit(1);
}
if ( ycoor < 0 || ycoor >= 30 )
{
// Deal with problem.
fprintf(stderr, "Out or range value of ycoor: %d\n", ycoor);
exit(1);
}
grid[xcoor-1][ycoor-1] = symbol[1];
}
while(scanf(“%d%d%c%c”、&xcoor、&ycoor、&symbol[0]、&symbol[1])==4)
{
如果(xcoor<0 | | xcoor>=30)
{
//处理问题。
fprintf(stderr,“xcoor的超出或范围值:%d\n”,xcoor);
出口(1);
}
如果(ycoor<0 | | ycoor>=30)
{
//处理问题。
fprintf(stderr,“ycoor的超出或范围值:%d\n”,ycoor);
出口(1);
}
网格[xcoor-1][ycoor-1]=符号[1];
}
尝试使用调试器并查看代码失败的地方。顺便说一句:代码几乎无法读取。硬编码数字是成功的最佳方式:-)请添加验证xcoor-1
和ycoor-1
是否在[0,30)
.1)xcoor
未初始化。2)如果存在无效输入,则需要清除输入缓冲区(stdin)。