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

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

要求是这样的.
展开
 我来答
xoaxa
推荐于2018-03-06 · TA获得超过8611个赞
知道大有可为答主
回答量:6415
采纳率:72%
帮助的人:3489万
展开全部
#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;
}
tattackor
推荐于2016-09-14 · TA获得超过3.5万个赞
知道大有可为答主
回答量:5083
采纳率:94%
帮助的人:893万
展开全部
  1. 使用文本操作函数fscanf读入即可。

  2. 核心代码:

    float a;
    FILE * f=fopen("文本名称","r");
    fscanf(f,"%f",&a);
    fclose(f);
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
jzp1
2014-04-12 · TA获得超过425个赞
知道小有建树答主
回答量:391
采纳率:50%
帮助的人:145万
展开全部
#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了。

要求是这样的.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
shine1991
科技发烧友

2014-04-12 · 智能家居/数码/手机/智能家电产品都懂点
知道顶级答主
回答量:4.7万
采纳率:82%
帮助的人:2.3亿
展开全部
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;
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式