gpt4 book ai didi

c - 不要阅读 C 中文本的第一行

转载 作者:太空宇宙 更新时间:2023-11-04 02:30:06 25 4
gpt4 key购买 nike

我有一个这样的文本文件:

3 3 0

2 3 5

3 8 9

4 5 6

我想将这些数字放入一个矩阵中。第一行是为矩阵创建 malloc 的行数和列数。然后,下一行是矩阵上的数字。我有这段代码:

int mat[3][3];
int i, j;
FILE *fp;
char c;

if((fp = fopen("texto.txt", "r")) == NULL){
printf("Error al abrir el archivo");
return -1;
}

for(i=0;i<3;i++){
for(j=0;j<3;j++){
mat[i][j]=0;
}
}

i = 0;
while (1)
{
if (feof(fp))
break;
fscanf (fp, "%[^\n]%d %d %d", &mat[i][0], &mat[i][1], &mat[i][2]);
i++;
}
fclose(fp);

for(i=0;i<3;i++){
for(j=0;j<3;j++){
printf("%d ", mat[i][j]);
}
printf("\n");
}

(对不起西类牙文)

我没有编写 malloc,因为我只是想看看我是否正确创建矩阵,知道它是 3x3。

所以问题是我不知道如何从文本文件的第二行制作矩阵,也不要使用第一行。

谢谢!

最佳答案

阅读documentation of fscanf .请注意,格式控制字符串中的空格也可能会跳过换行符,并且 fscanf 返回扫描项目的数量(这对您来说应该很重要)。在某些情况下,您可能还对 %n 感兴趣。

请注意,您对 fscanf 的使用是错误的(undefined behaviour 也是如此),因为 %[^\n] 需要一个您未提供的参数。使用像 GCC 这样好的编译器,您应该启用所有警告和调试信息(例如使用 gcc -Wall -Wextra -g 编译),您将收到警告。

如果您想跳过第一行,请先读取每个字符(使用 fgetc ),直到得到 EOF'\n'。或者使用 fgetsgetline(3) (在 POSIX 上,如 this )阅读并忽略第一行。

如果行真的很重要,您可以读取每一行(例如使用 fgetsgetline(3) )并使用例如解析每一行sscanf否则。

关于c - 不要阅读 C 中文本的第一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44628849/

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