|
这是存放数据的文件 test.txt
- 1041 1467 7334 9500 2169 7724 3478 3358 9962 7464
- 6705 2145 6281 8827 1961 1491 3995 3942 5827 6436
- 6391 6604 4902 1153 1292 4382 9421 1716 2718 2895
复制代码
想把它们读到两个数组中,一个是整型a,一个是double b,源文件和运行结果
分别如下
- #include <stdio.h>
- #define MAX 30
- int main()
- {
- int i = 0 ;
- FILE *fp ;
- int a[30] = {0};
- if( (fp = fopen("test.txt", "r")) == NULL )
- printf("Open file fail!!!\n");
- for(i = 0 ; i < MAX ; i++)
- {
- fscanf(fp, "%i", &a[i]) ;
- printf("%i\t",a[i]);
- }
-
- fclose(fp);
- return 0;
- }
复制代码
结果正确;
- #include <stdio.h>
- #define MAX 30
- int main()
- {
- int i = 0 ;
- FILE *fp ;
- double b[30] = {0};
- if( (fp = fopen("test.txt", "r")) == NULL )
- printf("Open file fail!!!\n");
- for(i = 0 ; i < MAX ; i++)
- {
- fscanf(fp, "%g", &b[i]) ;
- printf("%g\t",b[i]);
- }
-
- fclose(fp);
- return 0;
- }
复制代码
结果显示b还是zero,不成功。问题在哪里呢?
知道原因了,fscanf在读入double类型数据时
- fscanf(fp,"%lf",&double_var);
复制代码
另外,如果test.txt文件是如下的形式
- a b c d e f g h i j
- =============================================
- 1041 1467 7334 9500 2169 7724 3478 3358 9962 7464
- 6705 2145 6281 8827 1961 1491 3995 3942 5827 6436
- 6391 6604 4902 1153 1292 4382 9421 1716 2718 2895
复制代码
怎么才能跳过前两行,直接读后面的数据呢?
我的办法是定义一个字符串指针,然后把前面用不到的数据读进去,接下来再读数据
- ...
- char *sp;
- ....
- fread(sp,sizeof(char),num,fp);
- fscanf...
复制代码
这样虽然可行,但是得数一下前面的字符,有点儿笨。
不知道fseek能不能帮助定位文件指针。
大家都怎么处理的。 |
|