有关C语言中文件读取的问题

这是程序主代码voidmain(){FILE*fp;fp=fopen("通讯录.txt","r");do{fscanf(fp,"%s%s%s%s%s",student[n... 这是程序主代码
void main()
{
FILE *fp;
fp=fopen("通讯录.txt","r");
do
{
fscanf(fp, "%s%s%s%s%s", student[num].number, student[num].name, student[num].sex, student[num].sushe, student[num].phone);
++num;
} while (!feof(fp));
fclose(fp);
count=num;
function_select();
}
下面是输出函数
void search()
{
FILE *fp;
struct student *p;
fp = fopen("通讯录.txt", "rb");
printf("\t学号\t姓名\t电话号码\t性别\t宿舍号\n");
for(p=student;p<student+num;p++)
printf("\t%s\t%s\t%s\t%s\t%s\n",p->number,p->name,p->phone,p->sex,p->sushe);
fclose(fp);
我文件中有三组数据..可是为什么输出时只有一组数据..
展开
 我来答
折心灬小轩
推荐于2016-10-28 · TA获得超过543个赞
知道小有建树答主
回答量:259
采纳率:0%
帮助的人:109万
展开全部
首先说数组:
你认为什么是一维数组,什么是多维数组?
多维数组就是每一个元素又是一个数组的数组,他在内存中是存储在一片连续的内存块中的(动态多维数组除外)。

其次说说输入:
scanf在接受除了%s和%c的时候,都是可以忽略掉回车和空格的;在接受%s和%c中,空格和回车都作为终止符,如果你需要向文件添加/读取一个空车或回车,可以使用fputc/fgetc来完成

之后,说说你的程序:
你的程序貌似和文件没有关系,你只是向文件中写入了数据,之后你输出的还是你结构体数组中的局部变量。第一,你向文件写入的时候没有加入换行,回车之类的控制符,第二,结构体数据中的变量和文件中的数据不是同一个概念,所以你程序本意就是错误的

最后,建议做通讯录的时候不要使用数组,用动态链表,毕竟数据总数是不确定的

满意请采纳,不满意请追问
追问
如果我把while里的条件改为num<=50..是可以读取全部数据的..但!feof(fp)就只读了一个数据..后来我输出num发现也只有1..我对链表还不太熟悉..只有链表才能读取全部数据吗?
追答
不是只有链表才可以读取全部数据,是使用适当的数据结构会比较方便。
不是问为什么只有一组数据吗,是因为你结构体中存储的只有一组数据,你若想使用其他数据,就要用变量就文件中的数据关联起来,就是说,你输出的只是结构体中存储的值,他们的值只是文件中数据的一个小集合,所以并不是三组,而是一组,你至少需要把文件中的三组数据全部保存到变量里在输出吧。
寒寒家
2015-01-01 · TA获得超过2919个赞
知道大有可为答主
回答量:1482
采纳率:100%
帮助的人:1973万
展开全部
search好像是要从文件里读数据,然后输出是吧,为什么只看到了打开文件的部分,没有看到读数据的地方呢?
打开文件之后就输出了?
追问
读数据在main里面已经执行过了..只不过main从文件里面只读取了一组数据..没有读取全部数据..我就是想问代码为什么不能读取全部数据..
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式