逐字逐句读取文件

时间:2016-05-07 14:01:01

标签: c file io

我有一个文件,每行有两个未知长度的数字,用空格分隔。数字可以是任何大小,最多500个数字,所以我需要逐个字符地读取它并将其存储到整数数组中。我试过这样的事情:

while(fgets(line, sizeof line, fp) != NULL) { // assuming buff handles the line lenght
//read each character until ''
   // store it
//read each character until '\n'
  // store it
}       

我尝试使用fgetc阅读直到' '和' \ n'但它没有用。任何建议将不胜感激。

2 个答案:

答案 0 :(得分:1)

您不应该一次阅读一个字符。相反,一次读一行:

int num1, num2;

while (fscanf(fp, "%d %d\n", &num1, &num2) == 2) {
    // do something with num1 and num2
}

编辑:好的,现在你说这些数字可能超级巨大。没问题,只需使用libgmphttps://gmplib.org/manual/I_002fO-of-Integers.html

例如:

mpz_t num1, num2;
mpz_init(num1);
mpz_init(num2);

while (mpz_inp_str(num1, fp, 10) && mpz_inp_str(num2, fp, 10)) {
    // do something with num1 and num2
}

GMP为您提供无限的精确度,因此您可以存储任意长度的数字,并对它们进行数学运算。

答案 1 :(得分:1)

如果采用long double格式,我相信您可以处理几乎任何合理的“大小”,除此之外您不必担心“处理行长”。

 long double num1, num2;

 while (fscanf(fp, "%Lf %Lf\n", &num1, &num2) == 2){
    printf("%Lf\t%Lf\n", num1, num2);
 //copy the numbers into whichever appropriate array
 }