简体   繁体   English

如何读取 C 中每一行都有数字的文件?

[英]How to read a file with numbers on each line in C?

I'm trying to read a file that contains 10 numbers then adding them to an array so I can sort them later on but I'm having trouble reading them in. Not sure why this isn't working for me, can someone explain what is wrong?我正在尝试读取一个包含 10 个数字的文件,然后将它们添加到一个数组中,以便稍后对它们进行排序,但我无法读取它们。不知道为什么这对我不起作用,有人可以解释一下吗是错的? There's only a number on each lines.每行只有一个数字。

10.05
11.01
9.03
    double nums[10] = {0};
    int count;

    if ((fptr = fopen("filename", "r")) == NULL){
            printf("Error opening file.\n");
    }

    while ((c = getc(fptr)) != EOF){
            if (c != '\n'){
                    nums[count] = (double)c;
                    count = count + 1;
            }
    }
    fclose(fptr);

What is wrong:怎么了:

  • You are storing only one character.您只存储一个字符。
  • You are updating count each times on non-newline characters while updating should be on newline characters.您每次都在非换行符上更新count ,而更新应该在换行符上。
  • count is used without being initialized. count在未初始化的情况下使用。
  • Casting to double is not for this usage.转换为double不适合这种用法。

Possible fix:可能的修复:

int c;
FILE* fptr;

char line[1024]; // add line buffer and size tracking
int lineCount = 0;
double nums[10] = {0};
int count = 0; // initialize count

if ((fptr = fopen("filename", "r")) == NULL){
        printf("Error opening file.\n");
} else { // avoid using NULL to read file

    while ((c = getc(fptr)) != EOF){
            if (c == '\n'){ // update nums on newline character
                    line[lineCount] = '\0'; // don't forget to terminate the string
                    nums[count] = atof(line); // atof() from stdlib.h is useful to convert string to number
                    count = count + 1;
                    lineCount = 0; // start to read next line
            } else { // read line contents
                line[lineCount] = (char)c;
                lineCount = lineCount + 1;
            }
    }
    fclose(fptr);
}

Here I go这里我 go

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

int main()
{
   double values[10];
   int count;
   FILE *f = fopen("filename", "r");
   if (f == NULL)| {
      fprintf(stderr, "Some error message");
      return EXIT_FAILURE; // We cannot go any further - file is dead
   }
   // This is basic - you could overcome error problems
   // When able to read (including white space) we carry on until the array is full
   //  This is an area for improvement - error checking etc. 
   for (count = 0;  count < 10 && fscanf(f, " %lf", &values[count]) != 1; count ++);
   fclose(f);
   return EXIT_SUCCESS;
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM