| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1167 人关注过本帖
标题:fscanf问题,求大神,找了无数人都没找出问题
取消只看楼主 加入收藏
dubuzherui
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2013-8-12
结帖率:0
收藏
 问题点数:0 回复次数:7 
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
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
dubuzherui
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2013-8-12
收藏
得分:0 
回复 8楼 赵疯子
fscanf不是读取文件里面的数据吗?fprintf是写数据吧
2013-08-13 10:54
dubuzherui
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2013-8-12
收藏
得分:0 
回复 10楼 TonyDeng
好吧……
2013-08-13 14:20
dubuzherui
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2013-8-12
收藏
得分:0 
回复 13楼 beyondyf
师兄好,你也是学电气的吗?
这个是一个读取节点参数的子函数,调试的时候没有报错,运行的时候就报错了!
我排除了一下,发现应该是fscanf函数用的不对,但是就是不知道为什么错了,fscanf函数,用上结构体指针好混乱,不太懂,还请师兄指教!
这是我写的一个小程序,也有这问题:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<conio.h>

struct Nodetype  /*节点功率*/
{
    float P,Q;
}*temp;

const int MAX_N=7;
int main()
{
    int x,i;
    FILE *fp;

    fp=fopen("data1.txt","r");
    if(fp==NULL) printf("\n error");
    if(i<=MAX_N)
    {
        for(i=1;i<=MAX_N;i++)
            fscanf(fp,"%d",&x),printf("%d\n",x);
   
            fscanf(fp,"%f",&temp->P);
    }
    return 0;
}
2013-08-13 15:51
dubuzherui
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2013-8-12
收藏
得分:0 
回复 15楼 beyondyf
谢谢师兄,我看能不能换种方式实现,这个有点乱了,呵呵
2013-08-14 14:40
快速回复:fscanf问题,求大神,找了无数人都没找出问题
数据加载中...
 
   



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

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