c - 从文件中读取 float

标签 c multidimensional-array input file-io

我试图从下面的文件中只读取 float ,排除二维数组中所有月份和地区的名称,然后打印二维数组但没有得到正确的输出,(输出是零和垃圾值) 请检查我的代码并尝试提供帮助。

Link to the .txt file

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

int main(int argc, char* argv[]){
  FILE *f=fopen("Monthly_Rainfall_Himachal.txt","r");
  float data[12][12];
  int i,j;
  char newLine[1000];
  fgets(newLine,1000,f);
  char* item;
  fgets(newLine,1000,f);
  while(!feof(f)){
    for(i=0;i<12;i++){
      item=strtok(newLine,"\t");
      for(j=0;j<12;j++){
        item=strtok(NULL,"\t");
        data[i][j]=atof(item);
      }
      fgets(newLine,1000,f);
    }
  }
  for(i=0 ;i<12 ;i++){
    for(j=0 ;j<12 ;j++){
      printf("%.1f\t",data[i][j]);
    }
    printf("\n");
  }
  return 0;
}

最佳答案

无需使用 strtok() 解析您的行,您可以使用 sscanf() 读取您的 float 。 .它们也是关于使用 %n 说明符的信息,这在使用 sscanf() 读取输入时很有用。

注意:除了使用 fgets()/sscanf(),您还可以直接使用 fscanf( ),这是另一种可能的方法。

下面是一些示例代码:

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

#define LINESIZE 1000
#define ROWS 12
#define COLS 12

int main(void) {
    double data[ROWS][COLS];
    char line[LINESIZE];
    char *lineptr = NULL;
    int offset, row = 0, col;
    FILE *fptr;

    fptr = fopen("Monthly_Rainfall_Himachal.txt","r");
    if (!fptr) {
        fprintf(stderr, "Cannot open file!\n");
        exit(EXIT_FAILURE);
    }

    while (fgets(line, sizeof line, fptr) != NULL && row < ROWS) {
        lineptr = line;
        col = 0;
        while (sscanf(lineptr, "%lf%n", &data[row][col], &offset) == 1 && col < COLS) {
            lineptr += offset;
            col++;
        }
        row++;
    }

    for (int i = 0; i < ROWS; i++) {
        for (int j = 0; j < COLS; j++) {
            printf("%.2f ", data[i][j]);
        }
        printf("\n");
    }

    fclose(fptr);

    return 0;
}

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

相关文章:

C 处理输入

PHP从多维数组中删除重复值并完全唯一

python - 存在递归时保留局部变量的当前值

c - 错误输入后程序崩溃 (C)

c - fgets 不等待标准输入

c - 如何在C中存储事先不知道大小的数字序列?

c - 如何导出 C 表达式 "4 - 2 - 1"?

C:交换数组中的指针

c++ - 如何在U盘中制作安装程序?

c# - 在 C# 中创建子数组引用(使用不安全?)