C语言fopen(),哪里出错了呢?

#include<stdio.h>#defineFINITY5000#defineM20typedefstruct{charvexs[M];intedges[M][M];... #include <stdio.h>
#define FINITY 5000
#define M 20
typedef struct{
char vexs[M];
int edges[M][M];
int n,e;
} Mgraph;
void creat(Mgraph *g,char *s,int c)
{
int i,j,k,w;
FILE *rf=NULL;
rf=fopen(s,"r");
if(rf)
{
fscanf(rf,"%d%d",&g->n,&g->e);
for(i=0;i<g->n;i++)
fscanf(rf,"%ls",&g->vexs[i]);
for(i=0;i<g->n;i++)
for(j=0;j<g->n;j++)
{
if(i==j)
g->edges[i][j]=0;
else
g->edges[i][j]=FINITY;
}
for(k=0;k<g->e;k++)
{
fscanf(rf,"%d%d%d",&i,&j,&w);
g->edges[i][j]=w;
if(c==0)
{
g->edges[j][i]=w;
}
}
fclose(rf);
}
else
g->n=0;
}
int main()
{
Mgraph g;
creat(&g,"C:\\c_work\\OSPF\\a.txt",1);
printf("%d-%d\n",g.n,g.e);
int i=0;
for(i=0;i<g.n;i++)
printf("%c",g.vexs[i]);
getchar();
return 0;
}
这是个从文件里面读矩阵,并且输出矩阵信息的小程序,编译通过,但是运行就立即出错停止,不知道哪儿出问题,求帮帮忙。。。谢谢大家。。
文件的内容是这样的
6 6

012345

0 2 4

0 3 28
第一行是结点数和边数,第二行是结点编号,第三四行是相连结点和它的权值。。。
展开
 我来答
金色潜鸟
2013-05-03 · TA获得超过3.2万个赞
知道大有可为答主
回答量:1.3万
采纳率:89%
帮助的人:5725万
展开全部
fopen 没问题。
数据文件a.txt 必须存为 ASCII 文件,不要用 unicode 或其他。
fscanf(rf,"%ls",&g->vexs[i]); 里面格式要用 %1s, 注意是数字1,不是字母l.
后面可以添一个字符串结束符号: g->vexs[g->n]='\0';
这样输出打印便可简单地用 printf("%s",g.vexs);
追问

嗯,问题是解决了,但我有个奇怪的现象。。。如果那个a.txt不存在的话,程序一样输出,但是输出的就是0-3 3,0倒是可以理解但是e=3,这怎么可能呢,我e都没有赋值,还有vexs[]同样没有赋值,但是也输出了3。。。

追答
发生错误时的情况下,很难说出理由。只能理解为内存残余信息。
在我的win-7 上,输出是 0-0。
White_MouseYBZ
2013-05-03 · TA获得超过4万个赞
知道大有可为答主
回答量:2.1万
采纳率:82%
帮助的人:6674万
展开全部
g->edges[i][j]=w;这一句有问题。从文件中读出来的数赋给i和j,而这数已使数组edges越界了,你可以在g->edges[i][j]=w前输出i和j验证,也可以把M改定义为30证实……
追问
哪里有越界啊,i<节点数,j<节点数啊,怎么会越界。。。这是个二维数组啊。。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ID鸡蛋炒韭菜
2013-05-03 · TA获得超过391个赞
知道小有建树答主
回答量:570
采纳率:50%
帮助的人:78.9万
展开全部
跟一下程序看看错在哪里
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式