gpt4 book ai didi

c - 如何从一个文件中读取多个问题?

转载 作者:行者123 更新时间:2023-11-30 14:45:01 25 4
gpt4 key购买 nike

我必须读取一个txt文件,其中第一行描述了问题。它可以是a或b,然后我有一些整数和矩阵。我的程序适用于这两种情况,但有些文件在第一个问题之后可能会有另一个具有相同格式的文件。我不知道该怎么做。

txt 示例:

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 的 block 后地址为 0 字节

最佳答案

在解决此类问题(或任何编程任务,实际上)时,编写一些伪代码通常是有益的,只需用文字说明程序需要执行的操作。

做题

  • 打开文件
  • 当文件有剩余内容时
    • 读取一行文本
      • 从该行中提取宽度
      • 从该行中提取高度
      • 从该行中提取问题类型“A”或“B”
      • 如果问题类型为“A”
      • 从该行中提取???最后一个数字
      • 如果问题类型为“B”
      • 从该行中提取剩余的 2 个以上数字
    • 读取一行文本
      • 从该行中提取start-point-x
      • 从该行中提取start-point-y
    • 从文件中读取高度行文本
      • 在每一行中,提取 array_data宽度数字
    • 读取一个空行

(编辑:看起来我已经最大化了缩进级别,但你明白了)

所以现在问题被分解为更小的、希望更易于管理的问题。

关于c - 如何从一个文件中读取多个问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53310119/

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