求C语言高手,一个文本文件,我想把它存到一个结构体数组中,每一行的数字为一个数组,我是这样写的

#include<stdio.h>#include<stdlib.h>#include<sys/wait.h>structpart{inta[10];intn;};int... #include<stdio.h>
#include<stdlib.h>
#include<sys/wait.h>
struct part{
int a[10];
int n;
};
int main()
{
int ch,i=0,j=1;
struct part shuju[10];
FILE *fp,*fl;
if((fp=fopen("xy","r"))==NULL)
printf("error");
fl=fp;
ch=fgetc(fl);
while(!feof(fp)){
if(ch=='\n'){
i=0;
j++;
printf("\n");
}
else{
fscanf(fp,"%d",&shuju[j].a[i]);
printf("%d",shuju[j].a[i]);
i++;
ch=fgetc(fl);
}
}
fclose(fp);
return 0;
}
请问哪错了,或者给我个正确的,求指教。
展开
 我来答
百度网友d585d01
2013-05-19 · TA获得超过670个赞
知道小有建树答主
回答量:339
采纳率:0%
帮助的人:472万
展开全部
#include<stdio.h>
#include<stdlib.h>
struct part
{
int a[10];
int n;
};
int main()
{
int ch,i=0,j=1;
long length=1;
struct part shuju[10];
FILE *fp;
if((fp=fopen("xy.txt","r"))==NULL)
printf("error");
ch=fgetc(fp);
fseek(fp,0L,SEEK_SET);
while(!feof(fp))
{
if(ch=='\n')
{
i=0;
j++;
ch=fgetc(fp);
printf("\n");
length=ftell(fp);
fseek(fp,length-1,SEEK_SET);
}
else
{
fscanf(fp,"%d",&shuju[j].a[i]);
printf("%d\t",shuju[j].a[i]);
i++;
ch=fgetc(fp);
}
}
printf("\n");
fclose(fp);
return 0;
}

楼主的定义两个文件指针的目的是不想让文件内部指针乱动,影响读取数据吧,但是这是不行的,因为即使定义了两个指针,读取ch时,文件内部指针还是会动。惟一的办法就是用ftell函数读取文件指针位置,然后再用fseek函数把文件内部指针位置移动到所需要的地方。。。

更多追问追答
追问
fscanf(fp,"%d",&shuju[j].a[i]);
printf("%d\t",shuju[j].a[i]);
i++;
ch=fgetc(fp);
就是这一段代码不会让fp移动两次么?fscanf(fp,"%d",&shuju[j].a[i]);应该再读就是下个数了,而ch=fgetc(fp)也会让fp指向下个字符。。还请大神解惑
追答
读取文件时,读取的同时,文件内部的指针向后移动。fscanf函数读取数字,同时指针后移。fgetc也会让指针后移,这个函数主要是判断是否换行。假如正好到换行了,ch是换行符,进去入if语句,里面还得用到fgetc,这时候读取的是下一行第一个数字的最高位,此时必须让文件内部指针后退一个单位。假如没有fseek函数移动指针,每一行的第一个数字的最高位被赋值给ch,而结构体只能读取第一个数字最高位后面的位了。
xulinbo1234
2013-05-19 · 超过16用户采纳过TA的回答
知道答主
回答量:72
采纳率:0%
帮助的人:31.9万
展开全部
fgetc是用来读字符的吧,你结构体里定义了一个整型变量,读个字符放进去肯定有问题···
你这个我看着看着就看不懂了,想读数据这种直接用fread就好了;
像这样
fread(part 型指针,sizeof(part),1,fp);
你可以先定义一个part型的数组
struct part a【100】 = {0};
while(1)
{
if(fread(a,sizeof(part),1,fp) == 1)
{
a++;
}
else {
break;
}
}
这样应该就可以了···
追问
但是每个行的数字是不同的呀,我是想遇到了'\n'就开始下一个数组。。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式