我必须读取一个txt文件,其中第一行描述了问题。它可以是a或b,然后我有一些int和as矩阵。我的程序对两者都有效,但有些文件在第一个问题之后可能会有另一个相同格式的文件。我不知道如何做到这一点。
文本示例:
5 5 A(B) 1
0 3 (start point)´
1 5 6 5 9
5 8 6 3 1
8 6 9 5 3
5 6 9 3 0
2 3 9 3 8
那么这种格式的另一个或更多问题
while(!feof(fp)){
fscanf(fp, "%d %d %c %d", &L, &C, &variante, &pontos);
mapa=(int **)malloc(L*sizeof(int*));
for(i=0; i<L; i++){
mapa[i]=(int*)malloc(C*sizeof(int));
}
for(i=0; i<L; i++){
for(j=0; j<C; j++){
mapa[i][j]=0;
}
}
if(variante == 'A') {
fscanf(fp, "%d %d", &Linit, &cinit);
for(i=0; i<L; i++){
for(j=0; j<C; j++){
fscanf(fp, "%d", &mapa[i][j]);
printf("%d-", mapa[i][j]);
}
printf("\n");
}
possivel=varianteA(mapa, L, C, Linit, cinit, &custo);
printf("%d\n",custo);
}
if(variante== 'B'){
line=(int*)malloc(pontos*sizeof(int));
col=(int*)malloc(pontos*sizeof(int));
for(k=0; k<pontos; k++){
line[k]=0;
col[k]=0;
}
for(k=0; k<pontos; k++){
fscanf(fp, "%d %d", &line[k], &col[k]);
}
for(i=0; i<L; i++){
for(j=0; j<C; j++){
fscanf(fp, "%d", &mapa[i][j]);
printf("%d-", mapa[i][j]);
}
printf("\n");
}
possivel=varianteB(mapa, L, C, &custo, pontos, line, col);
printf("%d %d\n", possivel, custo);
free(line);
free(col);
}
for(i=0; i<L; i++){
int *linha;
linha=mapa[i];
free(linha);
}
free(mapa);
}
// free(variante);
fclose(fp);
现在我有这个,但它做了一个更多的问题,是不在文件中。和valgrind给我一个错误:possivel=varianteA(..).它表示在分配了大小为24的块后,地址为0字节
2条答案
按热度按时间bzzcjhmw1#
当处理这类问题(或者任何编程任务,真的)时,写一些 * 伪代码 * 通常是有益的,只是用文字描述程序需要做什么。
执行问题
(EDIT:看起来好像我已经将缩进级别设置到了最大值,但您应该明白了)
所以现在问题被分解成更小的,希望更容易管理的问题。
xpszyzbs2#
下面是一些sudo代码示例,说明如何构建你的程序。你将不得不进行大量修改,但你说你只需要阅读第二个问题。