gpt4 book ai didi

c - 如果每行都以换行符终止,则在 C 中读取文件

转载 作者:行者123 更新时间:2023-11-30 16:36:56 24 4
gpt4 key购买 nike

显然,我在逐行或逐字符读取文件时遇到一些问题,因为文件的每一行都以换行符终止。我认为这个问题与那些换行符有关,因为当我尝试使用 fgetc() 或 fgets() 读取文件时,当我尝试在标准输出上打印结果时,我没有得到任何结果。

给我带来问题的第一个文件的示例:

12345678
12849499
47484900

我尝试使用另一个文件,例如

123456596945869498

使用 fgetc() 或 fgets() 解析文件时 stdout 上的输出正是我所期望的:文件的内容。

现在,读取文件的目的是将文件的内容存储在指针的矩阵中。我尝试了很多方法来绕过这些换行符。我尝试过这样的:

i = 0;
while((c = fgetc(f)) != EOF){
if(c != '\n')
p[i][j++] = c; /*Incrementing j by one ad each iteration */
if(c == '\n')
i++; /*If c == '\n', skip to the next row of the matrix */
}

其中 I 是行索引,j 是列索引。我什至尝试过使用 fgets,就像这个论坛的成员所建议的那样:

while((fgets(line, col,f))!= NULL){
p[i++] = strdup(line);
}

有人可以帮我解决这个问题吗?

这是我的程序的主要内容:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define K 100

int main() {
FILE *f;

f = fopen("out_test6_1.txt", "r");

int row = 0;
int col = 0;
char c;

// Evaluating number of rows and columns of the new matrix,
// parsing the file in search of newlines chars

while((c = fgetc(f)) != EOF ) {
if(c != '\n' && row == 0)
col++;

else if(c == '\n')
row++;
}

printf("rows %d\n", row);
printf("columns %d\n", col);

int i, j;
char**p = malloc(row*sizeof(char*));
for(i = 0; i < row; i++) {
p[i] = malloc(col*sizeof(char));
}

i = 0;
while((c = fgetc(f)) != EOF) {
if(c != '\n')
p[i][j++] = c;
if(c == '\n')
i++;
}

for(i = 0; i < row; i++) {
for(j = 0; j < col; j++) {
printf("%c", p[i][j]);
}
}

fclose(f);

return 0;
}

最佳答案

代码读取文件以查找行和列,但在第二遍之前无法倒回。

i = 0;
rewind(f); // add
while((c = fgetc(f)) != EOF) {
<小时/>

注意到的其他一些问题:

// To properly distinguish all characters from EOF
// char c;
int c;

我希望代码能够找到最大列宽并稍后使用它。

  size_t max_col = 0;
while((c = fgetc(f)) != EOF ) {
col++;
if (c == '\n') {
if (col > max_col) {
max_col = col;
col = 0;
}
row++;
}
}
if (col > max_col) {
max_col = col;
}

...
// p[i] = malloc(col*sizeof(char));
p[i] = malloc(sizeof *(p[i]) * max_col);

关于c - 如果每行都以换行符终止,则在 C 中读取文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48240360/

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