gpt4 book ai didi

c - 在循环内使用指针后,文件中的行未被读取

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

所以我正在尝试从文件中读取矩阵(我确信有比我这样做更好的方法)。我很难弄清楚如何从文件中读取每个单词(即矩阵的每个条目),因此决定读取每一行并使用我在 stackexchange 中找到的名为 strtok 的东西。

我的 main() 内部看起来像这样

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <string.h>
#include <malloc.h>
#include <time.h>
#include <string.h>

int main(){
FILE *f;
int nmatrix=3;
int nmax=3;
int something;
int number, count, count2, i, j;
srand(time(NULL));
size_t len = 0;
ssize_t read;
char * line = NULL;
char * pch;
int ia;
int (*B)[nmatrix][nmatrix] = malloc(nmatrix * nmatrix * sizeof(int));


while(nmatrix<=nmax){
// Creation of Matrix
f = fopen("matrix.txt", "w");
for(count = 1; count <= nmatrix; count ++){
for(count2 = 1; count2 <= nmatrix; count2 ++){
number = rand()%9;
fprintf(f, "%s%d ", " ", number);
}
fprintf(f, "%s\n", " ");
}
fclose(f);

// Reading Matrix
f = fopen("matrix.txt", "r");
i=0;
while((read = getline(&line, &len, f)) != -1) {
printf("%s\n", line);
pch = strtok(line," ,.-");
j=0;
while (pch != NULL & j<nmatrix){
ia= (int)*pch-48;
*B[i][j]= ia;
pch = strtok(NULL, " ,.-");
j=j+1;
}
i=i+1;
}
fclose(f);

nmatrix=nmatrix+1;
}


return 0;
}

终端中的第一个输出是 *B[i][j]= ia; 行是否被删除,第二个输出是。第一个输出读取文件中的所有行,第二个不读取最后一个。为什么? (输出看起来不同,因为矩阵是随机生成的)。

提前致谢 enter image description here

我对所有事情都很陌生,特别是指针,所以如果有任何使用不正确的地方,我将不胜感激。

最佳答案

您有几个问题。您使用的是 & 而不是 && (并没有真正影响它,但仍然是错误的)并且您在作业中的指针错误。我更改了输出以显示矩阵中存储的内容,而不是读取行。 *B[i][j]= ia; 需要是 (*B)[i][j]= ia;

   // Reading Matrix
f = fopen("matrix.txt", "r");
i=0;
while((read = getline(&line, &len, f)) != -1) {
pch = strtok(line," ,.-");
j=0;
while (pch != NULL && j<nmatrix){
printf("\n%d %d :", i, j);
ia= (int)*pch-48;
(*B)[i][j]= ia;
printf("%d\n", (*B)[i][j]);
pch = strtok(NULL," ,.-");
j=j+1;
}
i=i+1;
}
fclose(f);

关于c - 在循环内使用指针后,文件中的行未被读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46182058/

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