在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
有谁指教我这是为什么?