c语言中如何使用fscanf从文件中读取数据
How to read data from file with fscanf in c-language
我想用“fscanf”导入数字(总共 40000 个,space 分隔)(格式:2.000000000000000000e+02)并将其放入一维数组中。我尝试了很多东西,但我得到的数字很奇怪。
到目前为止我得到的:
int main() {
FILE* pixel = fopen("/Users/xy/sample.txt", "r");
float arr[40000];
fscanf(pixel,"%f", arr);
for(int i = 0; i<40000; i++)
printf("%f", arr[i]);
}
我希望有人能帮助我,我是初学者 ;-)
非常感谢!!
你需要循环调用fscanf()
。你只读了一个数字。
int main() {
FILE* pixel = fopen("/Users/xy/sample.txt", "r");
if (!pixel) {
printf("Unable to open file\n");
exit(1);
}
float arr[40000];
for (int i = 0; i < 40000; i++) {
fscanf(pixel, "%f", &arr[i]);
}
for(int i = 0; i<40000; i++) {
printf("%f", arr[i]);
}
printf("\n");
}
而不是:
fscanf(pixel,"%f", arr);
与此完全等价且只读取一个值:
fscanf(pixel,"%f", &arr[0]);
你想要这个:
for(int i = 0; i<40000; i++)
fscanf(pixel,"%f", &arr[i]);
完整代码:
#include <stdio.h>
#include <stdlib.h>
int main() {
FILE* pixel = fopen("/Users/xy/sample.txt", "r");
if (pixel == NULL) // check if file could be opened
{
printf("Can't open file");
exit(1);
}
float arr[40000];
int nbofvaluesread = 0;
for(int i = 0; i < 40000; i++) // read 40000 values
{
if (fscanf(pixel,"%f", &arr[i]) != 1)
break; // stop loop if nothing could be read or because there
// are less than 40000 values in the file, or some
// other rubbish is in the file
nbofvaluesread++;
}
for(int i = 0; i < nbofvaluesread ; i++)
printf("%f", arr[i]);
fclose(pixel); // don't forget to close the file
}
免责声明:这是未经测试的代码,但它应该让您了解自己做错了什么。
我想用“fscanf”导入数字(总共 40000 个,space 分隔)(格式:2.000000000000000000e+02)并将其放入一维数组中。我尝试了很多东西,但我得到的数字很奇怪。
到目前为止我得到的:
int main() {
FILE* pixel = fopen("/Users/xy/sample.txt", "r");
float arr[40000];
fscanf(pixel,"%f", arr);
for(int i = 0; i<40000; i++)
printf("%f", arr[i]);
}
我希望有人能帮助我,我是初学者 ;-) 非常感谢!!
你需要循环调用fscanf()
。你只读了一个数字。
int main() {
FILE* pixel = fopen("/Users/xy/sample.txt", "r");
if (!pixel) {
printf("Unable to open file\n");
exit(1);
}
float arr[40000];
for (int i = 0; i < 40000; i++) {
fscanf(pixel, "%f", &arr[i]);
}
for(int i = 0; i<40000; i++) {
printf("%f", arr[i]);
}
printf("\n");
}
而不是:
fscanf(pixel,"%f", arr);
与此完全等价且只读取一个值:
fscanf(pixel,"%f", &arr[0]);
你想要这个:
for(int i = 0; i<40000; i++)
fscanf(pixel,"%f", &arr[i]);
完整代码:
#include <stdio.h>
#include <stdlib.h>
int main() {
FILE* pixel = fopen("/Users/xy/sample.txt", "r");
if (pixel == NULL) // check if file could be opened
{
printf("Can't open file");
exit(1);
}
float arr[40000];
int nbofvaluesread = 0;
for(int i = 0; i < 40000; i++) // read 40000 values
{
if (fscanf(pixel,"%f", &arr[i]) != 1)
break; // stop loop if nothing could be read or because there
// are less than 40000 values in the file, or some
// other rubbish is in the file
nbofvaluesread++;
}
for(int i = 0; i < nbofvaluesread ; i++)
printf("%f", arr[i]);
fclose(pixel); // don't forget to close the file
}
免责声明:这是未经测试的代码,但它应该让您了解自己做错了什么。