c - 在C中将文本文件读取到数组中

标签 c file loops for-loop fgets

我想将 .txt 文件解析为 C 中的一维数组。我使用 fgets 函数将文件的内容读入数组(“waveform”作为文件内容要写入的数组)存储 - 定义为“char”)。保存的值需要作为整数值保存到新数组中。我不确定我哪里出错了。 P.S:我是 C 编程新手,请耐心等待:) 请忽略因粘贴而导致的索引问题

int main(){
    int a, win[10];

    FILE *filename = fopen("testFile.txt","r");
    char waveform[10];

    if (filename == NULL)
    {
        printf("Error opening file.\n");
        exit(8);
    }

    for(int i =0;1;i++){
        if(fgets(waveform[i], 10, filename) == NULL);
        break;

                if(i < 10)
            {
           a = atoi(waveform[i]);
           win[i] = a;
            }
         }

    fclose(filename);

    return 0; 
}

Compiler errors - image embedded

testFile.txt中的数据: 行 vector 中的 1 到 10。

最佳答案

您走在正确的道路上。这是我对该主题的贡献:

  1. 打开文件 (fopen)
  2. 计算行数(getcrewind)
  3. 将所有行读入数组 (getline)
  4. 释放内存并关闭文件(freefclose)

代码示例:

#include <stdlib.h>
#include <stdio.h>

int main(int argc, char *argv[])
{

  // Open File
  const char fname[] = "testFile.txt";

  FILE *fp = fopen(fname, "r");

  if( !fp )
    goto error_open_file;
  printf("Opened file: %s\n", fname); 

  // Count Lines
  char cr;
  size_t lines = 0;

  while( cr != EOF ) {
    if ( cr == '\n' ) {
      lines++;
    }
    cr = getc(fp);
  }
  printf("Number of lines: %ld\n", lines); 
  rewind(fp);

  // Read data
  {// 'goto' + data[lines] causes error, introduce block as a workaround
    char *data[lines];
    size_t n;

    for (size_t i = 0; i < lines; i++) {
      data[i] = NULL;
      size_t n = 0;

      getline(&data[i], &n, fp);

      if ( ferror( fp ) )
        goto error_read_file;

    }

    for (size_t i = 0; i < lines; i++) {
      printf("%s", data[i]);
      free(data[i]);
    }
  }

  // Close File
  fclose(fp);

  return 0;

error_read_file:
  perror("fopen ");
  return 1;

error_open_file:
  perror("getline ");
  return 2;

}

关于c - 在C中将文本文件读取到数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58008702/

相关文章:

c - 查找素数执行的程序需要一些时间

通过 go 模块的内存地址从 .so 文件调用 C 函数。 (cgo)

c - 在 C 中将文件拆分为固定大小的 block

c - c中的简单二维数组,段错误(核心转储)

javascript - 将数组项打印到列表项中的更简单方法 (JavaScript)

video - ffmpeg:编码视频时如何循环音频?

c - 在 C 中,为什么程序无法识别第二个 if 语句或大写 char 变量?

c - 在 Linux 中调试一个简单的字符驱动程序在 device_create() 上失败

xml - 在 ruby​​ 中写入 XML

javascript - 如何连续显示元素,隐藏它们,然后在 jQuery 中重复