标题:fscanf问题,求大神,找了无数人都没找出问题
只看楼主
dubuzherui
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2013-8-12
结帖率:0
 问题点数:0 回复次数:15 
fscanf问题,求大神,找了无数人都没找出问题
整理了一下,大伙帮忙看看,谢谢了!
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<conio.h>

/*结构体变量定义*/
struct Nodetype  /*节点功率*/
{
    float P,Q;
};

/*全局变量声明*/
int Node;  /*节点数*/
int *Num;  /*保存原始节点序号*/
int NP,NQ=0;  /*PV+PQ、PQ节点数*/
struct Nodetype *No;  /*节点数据*/
float *V;
float *Dlta;
int i,j,m;
FILE *in,*out;

/*报错子函数*/
void ErrorMsg(int n)
{
    if(n==1)
    {
        printf("cannot open zhe file");
        getch();
        exit(1);
    }
    if(n==2) printf("cannot open zhe file");
    if(n==3) printf("cannot open zhe file");
    if(n==4) printf("cannot open zhe file");

}


/*这个函数的功能是读取,data文件里面的数据*/
void main()
{
    int k;
    struct Nodetype *Noi;
   
    if((in=fopen("Data.txt","r"))==NULL) ErrorMsg(1);
    fscanf(in,"%d %d",&Node,&k);  /*读取节点数目Node*/
    NP=Node-1;   /*PV+PQ节点数,即非平衡节点数目*/
    Num=(int *)malloc(sizeof(int)*Node);  /*开Node个空间,每节点一个*/
    V=(float *)malloc(sizeof(float)*Node);  /*电压*/
    Dlta=(float *)malloc(sizeof(float)*Node);  /*电压相角*/
    No=(struct Nodetype*)malloc(sizeof(struct Nodetype)*Node);  /*节点功率*/
   
    while(k!=0)  /*若k=0,说明节点数据读取完毕*/
    {
        switch(k)
        {
        case 1:k=NQ;NQ++;break;  /*pq节点*/
        case 2:k=NP-j;j++;break;  /*pv节点*/
        case 3:k=NP;break;  /*平衡节点*/
        default:ErrorMsg(3);
        }
        Noi=No+k;
        fscanf(in,"%d %f %f %f %f",&i,&(*Noi).P,&(*Noi).Q,V+k,Dlta+k);
        i--;
        *(Num+i)=k;//第i个Num元素中存放i节点在NO中的下标
        fscanf(in,"%d",&k);//读取节点类型
    }
}
这是潮流计算的一个子函数,读取节点数据,调试没有报错,运行就报错!


[ 本帖最后由 dubuzherui 于 2013-8-13 11:05 编辑 ]
搜索更多相关主题的帖子: include cannot 结构体 file 
2013-08-12 23:04
XiaoXiao_Ren
Rank: 3Rank: 3
来 自:西安
等 级:论坛游侠
威 望:1
帖 子:80
专家分:198
注 册:2013-7-17
得分:0 
回复 楼主 dubuzherui
你的那个文件内容是什么??

否极泰来
2013-08-12 23:18
liufashuai
Rank: 9Rank: 9Rank: 9
来 自:冥界-魔域-魂殿
等 级:蜘蛛侠
威 望:1
帖 子:370
专家分:1374
注 册:2012-6-22
得分:0 
把问题描述清楚,感觉代码好乱,你fscanf最好是以文本形式操作文件。

有一种落差是,你配不上自己的野心,也辜负了所受的苦难。






2013-08-13 09:15
我爱敲代码
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:70
专家分:165
注 册:2013-4-23
得分:0 
代码写的太乱了。。。
2013-08-13 09:53
dubuzherui
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2013-8-12
得分:0 
谢谢大家了,
文本内容:
4


3   4   0       0       1.05   0
2   3   0.5     0       1.10   0
1   1   -0.30   -0.18   0      0
1   2   -0.55   -0.13   0      0
0



1   2   0.1    0.4   1           0.01528
3   1   0      0.3   0.909091    0
1   4   0.12   0.5   1           0.01920
2   4   0.08   0.4   1           0.01413

数据的意思:
4为节点个数
3   4   0       0       1.05   0
分别表示:节点类型(3-平衡节点,2-为PV节点,1为PQ节点);节点编号(4);节点有功功率;节点无功功率;节点电压;节点相角

[ 本帖最后由 dubuzherui 于 2013-8-13 10:52 编辑 ]
2013-08-13 10:25
dubuzherui
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2013-8-12
得分:0 
整理了一下,大伙帮忙看看,谢谢了!
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<conio.h>

/*结构体变量定义*/
struct Nodetype  /*节点功率*/
{
    float P,Q;
};

/*全局变量声明*/
int Node;  /*节点数*/
int *Num;  /*保存原始节点序号*/
int NP,NQ=0;  /*PV+PQ、PQ节点数*/
struct Nodetype *No;  /*节点数据*/
float *V;
float *Dlta;
int i,j,m;
FILE *in,*out;

/*报错子函数*/
void ErrorMsg(int n)
{
    if(n==1)
    {
        printf("cannot open zhe file");
        getch();
        exit(1);
    }
    if(n==2) printf("cannot open zhe file");
    if(n==3) printf("cannot open zhe file");
    if(n==4) printf("cannot open zhe file");

}


/*这个函数的功能是读取,data文件里面的数据*/
void main()
{
    int k;
    struct Nodetype *Noi;
   
    if((in=fopen("Data.txt","r"))==NULL) ErrorMsg(1);
    fscanf(in,"%d %d",&Node,&k);  /*读取节点数目Node*/
    NP=Node-1;   /*PV+PQ节点数,即非平衡节点数目*/
    Num=(int *)malloc(sizeof(int)*Node);  /*开Node个空间,每节点一个*/
    V=(float *)malloc(sizeof(float)*Node);  /*电压*/
    Dlta=(float *)malloc(sizeof(float)*Node);  /*电压相角*/
    No=(struct Nodetype*)malloc(sizeof(struct Nodetype)*Node);  /*节点功率*/
   
    while(k!=0)  /*若k=0,说明节点数据读取完毕*/
    {
        switch(k)
        {
        case 1:k=NQ;NQ++;break;  /*pq节点*/
        case 2:k=NP-j;j++;break;  /*pv节点*/
        case 3:k=NP;break;  /*平衡节点*/
        default:ErrorMsg(3);
        }
        Noi=No+k;
        fscanf(in,"%d %f %f %f %f",&i,&(*Noi).P,&(*Noi).Q,V+k,Dlta+k);
        i--;
        *(Num+i)=k;//第i个Num元素中存放i节点在NO中的下标
        fscanf(in,"%d",&k);//读取节点类型
    }
}
这是潮流计算的一个子函数,读取节点数据,调试没有报错,运行就报错!

[ 本帖最后由 dubuzherui 于 2013-8-13 10:56 编辑 ]
2013-08-13 10:49
dubuzherui
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2013-8-12
得分:0 
回复 3楼 liufashuai
但是,我需要的是数据,float型的,用于后面的计算
2013-08-13 10:50
赵疯子
Rank: 8Rank: 8
来 自:dream
等 级:蝙蝠侠
威 望:2
帖 子:365
专家分:737
注 册:2013-5-5
得分:0 
你的问题好像是把 fprintf和fscanf弄混了,这个很难理解的
2013-08-13 10:50
dubuzherui
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2013-8-12
得分:0 
回复 8楼 赵疯子
fscanf不是读取文件里面的数据吗?fprintf是写数据吧
2013-08-13 10:54
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:0 
一看这代码那么多星号,明显就是把简单问题搞复杂,看都不想看。

授人以渔,不授人以鱼。
2013-08-13 11:30



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-418992-1-1.html




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

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