我有一个文件,每行有两个未知长度的数字,用空格分隔。数字可以是任何大小,最多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'但它没有用。任何建议将不胜感激。
答案 0 :(得分:1)
您不应该一次阅读一个字符。相反,一次读一行:
int num1, num2;
while (fscanf(fp, "%d %d\n", &num1, &num2) == 2) {
// do something with num1 and num2
}
编辑:好的,现在你说这些数字可能超级巨大。没问题,只需使用libgmp
! https://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
}