| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3415 人关注过本帖
标题:一个程序。用文件指针进行对数据的读写操作。不明白文件读取哪里错了。
只看楼主 加入收藏
李若斌
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:219
专家分:184
注 册:2009-9-30
结帖率:90.48%
收藏
已结贴  问题点数:50 回复次数:9 
一个程序。用文件指针进行对数据的读写操作。不明白文件读取哪里错了。
程序比较长。不过大家重点看下我画了红线的地方。其他部分我之前用非文件指针进行过编译已经是没问题的了。
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
/* #define NULL 0 */
typedef struct p
/*定义一个结构体,此结构体有一个前指针和一个后指针
,以及存放道值数值的双精度浮点数和存放此道值已经平滑多次的整型数*/
{ double daozhi;
  int pinghua;
  struct p *front;
  struct p *next;
}POIN;

typedef struct x
/*定了一个结构体为解决后面对某个道值多次平滑的时候的操作次数决定
,此结构体的作用就是先记录起来对应的道值平滑的次数。
然后为下次对某个道值是否需要进行平滑操作的时候进行判断*/
 { int m;
   struct x *nett;
 };

int main()
{
  char name[30];
  FILE *fp,*fp1;
  int  i,n,j;
  double a,b,c;
   /*三个临时变量
  ,在下面的程序中的道值平滑计算中作为临时量来用*/
  struct x *haad,*q,*t;
  POIN *head,*p,*s;
  p=(POIN *)malloc(sizeof(POIN));
  head=NULL;
  haad=NULL;
  q=(struct x *)malloc(sizeof(struct x));
  //printf("请输入能谱值实在的文件夹名字 name=");
  // scanf("%s",name);
  if((fp=fopen("K.txt","r"))==NULL)
    {
       printf("打不开文件\n");   
       return 0;
       } /*我把那个存数据的文件放在了程序编译后。保存源文件的目录下了。比如是D盘程序目录下。那是不是可以直接写那个放数据的TXT文件名。如果放在别的地方是不是要给出完全路径。比如说我没放在编译器的文件之下。而是放在C盘的程序里面?还有就是这里为什么就不执行了。大家帮忙看下*/
  n=0;
  while(fp!=NULL)/*循环依次输入N个道值的值。*/
  {
    s=(POIN *)malloc(sizeof(POIN));
    fscanf(fp,"%lf",&(s->daozhi));
    s->pinghua=0; /*初始状态的道值对应的平滑次数都为零*/
    if(head==NULL)/*建立存放道值的链表,其头指针为 head*/
     {
        s->front=NULL;
        s->next=NULL;
        head=p=s;
     }
    else
      {
        s->front=p;
        s->next=NULL;
        p->next=s;
        p=s;
      }
    t=(struct x *)malloc(sizeof(struct x));
    t->m=0;
    t->nett=NULL;
    if(haad==NULL) haad=q=t;
    /*建立起来临时存储的链表
    ,表长与前面的道值链表长度应该是相等的*/
    else
    {
      q->nett=t;
      q=t;
    }
 n++;
  }
 i=1;
  while(i<=(n-1)/2) /*根据输入的道值数量可以判断出来对道值链表的操作次数应该是
  等于N-1除以2次,因此循环N-1除以2次*/
  {
     j=i-1;
     s=head;
     p=s;
     q=haad;
     t=q;
     while(p!=NULL)
     /*内循环条件为当操作结点不为空的时候*/
       {

         if(p->front!=NULL&&p->next!=NULL)
         /*判断该结点是否有前驱结点以及后继结点,有的话进行下面的判断*/
          {
             if(p->front->pinghua==j&&p->next->pinghua==j)
             /*判断该结点的前驱结点的道值平滑次数是否为第i操作次数减一次1,
             比如如果结点总数为三的时候,那么只进行第一次操作?
             条件就是其前驱结点存在和后继结点存在,并且前驱道值操作次数为0
             后继道值的操作次数也有0次。那么条件成立。就对第二个道值操作一次。
             此判断条件主要是解决了对多道值的操作情况判断,其规律就是:
             N个道值。其中道值的操作最高次数恰好就等于道值总数-1乘以2次。
             并且并且在奇数的情况下和偶数的情况下是相同的。*/
              {
                a=p->front->daozhi;
                b=p->next->daozhi;
                c=p->daozhi;
                p->daozhi=(1.0/4.0)*(a+2*c+b);
                q->m++;
                /*若对某一道值进行了某次操作
                ,那么对应的操作次数链表中的点将为该道值的操作次数加一。*/
              }
           }
         p=p->next;
         q=q->nett;
       }

    while(s!=NULL&&t!=NULL)
    {
        s->pinghua=t->m;
        /*将对应的操作次数的值赋值给对应的道值结构体中的pinghua这个变量。
        以作为下次循环的时候是否对该道值进行操作进行判断。*/
        s=s->next;
        t=t->nett;
    }
  i++;
  }
  i=0;
  printf("重心法道值平滑以后的值分别为:\n");
  p=head;
  fp1=fopen("liyanping","w+");
  
  while(p!=NULL)
  {
    fprintf(fp1,"%f",p->daozhi);
    p=p->next;;
  }/*这里就是把数据依次放到文件里面。这里应该没什么错误吧*/
  
  fclose(fp);
  fclose(fp1);
  return 0;

}
搜索更多相关主题的帖子: 指针 文件 数据 
2010-05-26 08:30
李若斌
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:219
专家分:184
注 册:2009-9-30
收藏
得分:0 
50分的帖子都没人搭理了。。来个人啊  。。指点下文件指针啊!!!版主们都干嘛去了哇!
2010-05-26 09:38
q3286446
Rank: 1
来 自:中国
等 级:新手上路
帖 子:31
专家分:6
注 册:2010-5-24
收藏
得分:0 
帮你踩踩吧~~~
2010-05-26 13:41
ww稻草人
Rank: 5Rank: 5
来 自:陕西西安
等 级:职业侠客
帖 子:57
专家分:309
注 册:2010-5-11
收藏
得分:30 
  你说的对:如果你把源文件和那个txt文件放在同一个文件夹里面,那么就不用加路径,只写文件名就可以了,如果他们不在同一个文件夹里面,你就得给出数据文件txt的完整路径,比如说:e:/code/k.txt,这就是说在e盘的code文件夹下的k.txt文件。
  说实话我看你用红色写的那两段代码都对着,找不出什么毛病,没有什么,就是我平时用文件和你的方式有点不一样,我习惯打开一个文件,只是进行读时用这种fopen("K.txt","rt");要是进行写时就用fopen("K.txt","wt"),但是wt写文件时会把原来的内容覆盖掉。还有我觉得你这句 fprintf(fp1,"%f",p->daozhi);中的%f应该改为%lf,因为daozhi你在定义结构体中他是double型的。
  你的其他代码我没看,只是看了下你用红字写出来的,感觉没什么错误,应该是其他地方出错了吧, 可能你在开始程序之前你就没建立k.txt,或者你的文件内容格式没写好,你再检查检查吧。我"技穷"了,帮不上你什么了。


[ 本帖最后由 ww稻草人 于 2010-5-26 14:06 编辑 ]

我的博客  http://blog..cn/daocaoren020
2010-05-26 13:45
forever74
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:CC
等 级:版主
威 望:58
帖 子:1696
专家分:4295
注 册:2007-12-27
收藏
得分:0 
LZ您从头到尾没有描述过您的程序有什么问题,所以您的程序没有问题。

对宇宙最严谨的描述应该就是宇宙其实是不严谨的
2010-05-26 15:57
zhujianiu
Rank: 4
等 级:业余侠客
帖 子:126
专家分:244
注 册:2010-5-14
收藏
得分:0 
... 好乱!!!!
不晓得写的什么东西
2010-05-26 19:08
ouyangouyang
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:273
专家分:579
注 册:2009-10-8
收藏
得分:0 
顶上去啊,大虾现身啊

多少恨, 昨夜梦魂中。 还似旧时游上苑, 车如流水马如龙; 花月正春风!
2010-05-26 19:36
暗留香
Rank: 2
等 级:论坛游民
帖 子:49
专家分:75
注 册:2009-9-4
收藏
得分:10 

打开其他目录的文件,请使用格式: C:\\12.TXT  
因为在TC,OR,WINTC中,"\\" 才表示"\"~
over
2010-05-26 19:45
zhanfffmmm
Rank: 5Rank: 5
等 级:职业侠客
帖 子:238
专家分:343
注 册:2009-10-16
收藏
得分:10 
编译之后,其一:fp1=fopen("liyanping","w+");没有写入;
其二:你定义文件好像是NULL的,根本读不出来;
其三:我感觉先写入再读出,。。。
菜鸟之见。
2010-05-26 19:49
李若斌
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:219
专家分:184
注 册:2009-9-30
收藏
得分:0 
多谢大家顶起来。。虽然经过不懈努力我终于找了症状所在。关键是在输入的时候 那个文件是要加上后缀的 这是其一
还有就是输出的时候 那个输出到的文件也是要加后缀 。
2010-05-26 23:56
快速回复:一个程序。用文件指针进行对数据的读写操作。不明白文件读取哪里错了。 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.027545 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved