请问 C语言 读取文件数据时如何跳过字母

比如文件里有这些字符
“ATOM 1 C MOL C 1 3.866 0.612 1.345 1.00 0.00 C ”
我想跳过那些字母,只将 1 1 3.866这些数字读取到一个数组里,应该怎么做呢?

利用C语言中的fscanf()函数特点可以实现从文件中读取指定类型的数据

fscanf()函数在从文件读取数据后,返回读取的有效数据的个数,当读到的数据不是有效数据时,则会返回0,当读出错时,返回-1。

实现方法:

    定义接收数据的数组,因为数据中有小数,所以,定义成double类型数组

    定义文件指针fp,打开文件

    循环读取数据,采用fscanf(fp,"%lf", &ad[i] );来读取一个浮点数据

      如果fscanf()函数返回值是1,说明成功读取一个数值,i++,继续读取下一个数值

      否则,使用fgetc(fp)读取一个字符,让文件指针后移一位,继续尝试读取数值

    当文件读取结束 feof(fp),结束循环

    输出数组中的数据

参考代码:

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-03-23
#include<stdio.h>
int main ()
{
FILE *fp;
int i=0,j;
char str[99];
double n,a[100]={0};
fp=fopen("test.txt","r");
if(fp==NULL)return 1;
while(1)
{
fscanf(fp,"%s",str);
if(str[0]>='0'&&str[0]<='9')
{
sscanf(str,"%lf",&n);
a[i++]=n;
}
if(fgetc(fp)==EOF)break;
}
for(j=0;j<i;j++)printf("%.3lf ",a[j]);
printf("\n");
fclose(fp);
return 0;
}

第2个回答  2014-03-23
其实你可以把从文件读取到缓存中的数据中剔除不是数字的部分,
fopen 读到的数据先是放到缓存中的,只要你改变缓存中的数据,然后fclose()的时候,就可以达到你的目标了
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
你可以把读到ptr 所指缓存的内容,删掉不是数字的部分,再存入你的数组中
呃 你这一题貌似用 fgetc(FILE *stream) 更好做 一个一个处理 因为你的文件内容又不大

然后再从缓存中读到你想要的地方本回答被网友采纳
相似回答