标题:fseek(p,12L,SEEK_CUR); 的疑惑
取消只看楼主
URDbest
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2006-1-23
 问题点数:0 回复次数:1 
fseek(p,12L,SEEK_CUR); 的疑惑

在sav.txt中有以下内容:
gfp 31 100
gfp 31 100
gwl 32 100
gfp 31 100
都是以字符串的形式输出的:第一个15字节,第二个8字节,第三个4字节。换行是用/n字符,算一个字节吧?
以下的程序是有点搜索功能的,输入gfp就能也只能列出以上输出格式的包含gfp的内容
#include "stdio.h"
FILE *p;
struct student
{char *name;
char *no;
char *credit;
}stu;
void main ()
{char *name;
name=(char*)malloc(15*sizeof(char));
stu.name=(char*)malloc(15*sizeof(char));
stu.no=(char*)malloc(8*sizeof(char));
stu.credit=(char*)malloc(4*sizeof(char));
gets(name);
p=fopen ("sav.txt","r");
do
{fscanf (p,"%15s",stu.name);
switch (strcmp (name,stu.name)) /*这里是对比*/
case 0:{fscanf (p,"%8s%4s\n",stu.no,stu.credit); /*如果相同,则把该行剩余的都输出*/
printf ("%-15s%-8s%-4s\n",stu.name,stu.no,stu.credit);
break; /*不然,就把文件指针向尾端移动12字节*/
default: fseek(p,12L,SEEK_CUR); /*只是在这里,我觉得应该是13才对的,因为每行末尾包括'/n',但改成13就出错*/
}
}while(!feof(p));
}

如果是12的话,就输出
gfp 31 100
gfp 31 100
gfp 31 100

如果是13,只输出到前两个就卡机了
gfp 31 100
gfp 31 100

有谁指教我这是为什么?

搜索更多相关主题的帖子: CUR SEEK fseek 
2006-01-28 00:37
URDbest
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2006-1-23
得分:0 
谢谢,今天我发现程序中的{fscanf (p,"%15s",stu.name);里边的15有点多余,不用也可以
还是同一个文件
char a;
rewind(p);
fscanf (p,"%s%s%s\n",stu.name,stu.no,stu.credit);
fseek (p,-29L,1); /*如果\n真的不算一个字符的话,那么这个应该是28才对的啊*/
fscanf (p,"%c",&a);
printf ("%c",a);
如果是29则输出“g”,
如果是28则输出“f”。
谁解释一下啊,谢谢,幸亏你们了!!

2006-01-28 21:54



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




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

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