第1个回答 2012-03-02
个人感觉比推荐的答案更符合要求,只是把东西都写在通过文件里,如果你要把数字转换成数据,这个可以自己转,希望可以帮到忙。
#include<stdio.h>
#include <string.h>
void main()
{
FILE * fp;
fp = fopen("E:\\1.txt","r+t");
if(fp == NULL)
{
printf("can not open the file\n");
return ;
}
char str[50];
char name[50];
printf("输入名字:");
scanf("%s",name);
while(1)
{
if(EOF == fscanf(fp,"%s",str))
{
printf("没有你要找的人...");
break;
}
if(strcmp(name,str) == 0)
{
fscanf(fp,"%s",str);
break;
}
}
printf("你要的号码为%s\n",str);
}
第2个回答 2010-07-06
用fscanf函数按格式读取到结构体中,用strcmp比较字符是否相同,做查询,找到记住行数读取后面的字段的参数。
以下是我以前作业中有关你这个的截取:
读取:
void read(void)
{
FILE *cj;
int i,k;
man=0;
while(1)
{
printf("请输入要读取的文件:\n");
scanf("%s",&str);
if((cj=fopen(str,"r"))==NULL)
{
printf("打开失败\n");
}
else
{
break;
}
}
for(i=0;i<500;i++)
{
if(fscanf(cj,"%s %s %d %d %d %d %d %d %d %d %d",&student[i].id,&student[i].name,&student[i].n1,&student[i].n2,&student[i].n3,&student[i].n4,&student[i].n5,&student[i].n6,&student[i].n7,&student[i].n8,&student[i].n9)==-1)
{
break;
}
man=man+1;
}
printf("从%s读取去了“%d”条记录\n",str,man);
for(k=0;k<man;k++)
{
student[k].zong=student[k].n1+student[k].n2+student[k].n3+student[k].n4+student[k].n5+student[k].n6+student[k].n7+student[k].n8+student[k].n9;
}
for(i=0;i<man;i++)
{
student[i].ping=student[i].zong/9;
}
fclose(cj);
}
查询:
void inquiry(void)
{
int i;
char id[10];
while(1)
{
printf("请输入要查人的学号或名字(输入-1即返回上一级):\n");
scanf("%s",&id);
if(id[0]=='-'&&id[1]=='1')
{
printf("exit\n");
break;
}
else
{
for(i=0;i<man;i++)
{
if(strcmp(student[i].id,id)==0)
{
j=i;
break;
}
if(strcmp(student[i].name,id)==0)
{
j=i;
break;
}
j=-1;
}
if(j==-1)
{
printf("无此人\n");
}
else
{
printf(" | 学号 姓名 1 2 3 4 5 6 7 8 9 总分 平均分 | \n");
printf(" | %10s %-6s %3d %3d %3d %3d %3d %3d %3d %3d %3d %3d %3d | \n",student[j].id,student[j].name,student[j].n1,student[j].n2,student[j].n3,student[j].n4,student[j].n5,student[j].n6,student[j].n7,student[j].n8,student[j].n9,student[i].ping,student[i].zong);
}
}
}
}本回答被网友采纳