C语言读取文本文件浮点数。

从磁盘读取一个文本文件,这个文件是由若干行组成,每一行是一个double型的浮点数,读进系统之后,printf输出这些数在屏幕上。
文件的里浮点数是随机隔了了N个‘ \t\r\n’,数目是10W个。
要求:读入这个问题,提取出每一个double的字符串,然后将其变为浮点数。
不用fscanf函数,实现另外一个函数:fscanf_my来完成fscanf的功能。
读入这个问题,提取出每一个double的字符串,然后将其变为浮点数,
然后每一个字节遍历,碰到' \t\r\n'这些字符,截断,之前的有效字符就形成一个double了。

要求是这样的.

#include <stdio.h>
#include <math.h>
#include <string.h>

#define MAXLEN 20

int main () {
FILE *fp;
int ch,i = 0,n = 0;
char str[MAXLEN],filename[] = "indata.txt";
if((fp = fopen(filename,"rt")) == NULL) {
printf("不能打开文件:%s\n",filename);
return 1;
}
while((ch = fgetc(fp)) != EOF) {
if(ch == '\t' || ch == '\n') {
if(i > 0) {
str[i++] = '\0';
printf("%g\n",atof(str));
i = 0;
++n;
}
}
else str[i++] = ch;
}
printf("有效数据个数:%d\n",n);
fclose(fp);
return 0;
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2016-09-14

    使用文本操作函数fscanf读入即可。

    核心代码:

    float a;
    FILE * f=fopen("文本名称","r");
    fscanf(f,"%f",&a);
    fclose(f);

第2个回答  2014-04-12
#include <stdio.h>
FILE *fp = fopen("TXT文件路径", "r");
double dbTmp;
while (!feof(fp))
{
fscanf(fp, "%lf", &dbTmp); //读出的数在dbTmp里,一次读一行。
}
fclose(fp); //读完就退出循环追问

不用fscanf函数,实现另外一个函数:fscanf_my来完成fscanf的功能。
读入这个问题,提取出每一个double的字符串,然后将其变为浮点数,
然后每一个字节遍历,碰到' \t\r\n'这些字符,截断,之前的有效字符就形成一个double了。

要求是这样的.

第3个回答  2014-04-12
fscanf(xxx," %lf",&xxx);

追问

不用fscanf函数,实现另外一个函数:fscanf_my来完成fscanf的功能。
读入这个问题,提取出每一个double的字符串,然后将其变为浮点数,
然后每一个字节遍历,碰到' \t\r\n'这些字符,截断,之前的有效字符就形成一个double了。

要求是这样的.

追答#include <stdio.h>
#include <stdarg.h>
int fscanf_my(FILE*stream,const char*format,...);
int main(void) 
{
double f;
while(!feof(stdin)&&fscanf_my(stdin," %lf",&f)==1)
{
printf("%lf\n",f);
}
return 0;
}
int fscanf_my(FILE*stream,const char*format,...)
{
va_list ap;
char buffer[100];
int count;
fflush(stream);
va_start(ap,format);
fgets(buffer,100,stream);
count=vsscanf(buffer,format,ap);
va_end(ap);
return count;
}

本回答被提问者采纳
相似回答