求教!!!用变量与结构体里面的数据对比问题~~~

喵先生MJ 2008-05-08 09:40:08
/*
添加学生数据(中间或者末尾)
删除学生数据(中间或者末尾)
打开文件,完成每个学生的总成绩的运算(并填入到文件中)
-------------------------------
按照给定的条件(可以有多种选择--菜单)查找学生
1 指定某个学生
2 已知学好
3 已知姓名
4 已知某们功课的成绩或总成绩
5 制定某个范围
-------------------------------
修改学生信息
输出总分前三名的学生成绩
*/
#include<stdio.h>
#include<stdlib.h>
#define N 4
void save();
void read();

typedef struct
{
char id[10];
char sname[11];
int cj[3];
}stud;

main()
{

char ch='1';
while(ch!='0')
{
system("cls");
printf("\n\t\t\t菜单选项\n\n");
printf("\t1.添加数据\t2.查询数据\t3.修改数据\n");
printf("\t0.退出\n\n\n");
printf("\tPlease input a choose(1-0): ");
ch=getchar();getchar();

switch(ch)
{
case '1':
save();
// printf("\tOk\n");
getchar();getchar();
break;
case '2':
read();
printf("\nPlease press enter\n");
getchar();getchar();
break;
case '3':
break;
case '0':
exit(0);
default:
printf("\tError again");
break;
}
}
}
void save()
{
stud stu[N];
int i,j,t=1;
FILE *fp;
char filename[90];
printf("请输入要保存的文件的路径: ");
scanf("%s",&filename);
fp=fopen(filename,"w");
if(fp==NULL)
{
printf("没有找到文件或者无法打开,程序退出\n\n");
// exit(0);
}
printf("信息输入开始:\n");
for(i=0;i<N;i++)
{
printf("\n输入ID : ");
scanf("%s",stu[i].id);
printf("\n输入姓名 : ");
scanf("%s",stu[i].sname);

stu[i].cj[0]=0;
for(j=0;j<3;j++)
{
printf("输入第%d门成绩 : ",t);
scanf("%d",&stu[i].cj[j]);
t++;
}
t=1;
fwrite(&stu[i],sizeof(stu[i]),1,fp);
}
printf("\n输入完成.....");
fclose(fp);
}
void read()
{
stud s[N];
int i,j;
FILE *fp;
char filename[90];
char ch='1',x;
printf("请输入要查询的文件的路径: ");
scanf("%s",&filename);
fp=fopen(filename,"r");
if(fp==NULL)
{
printf("没有找到文件或者无法打开,程序退出\n\n");
}

while(ch!='0')
{
system("cls");
printf("\n\t\t\t查询菜单\n\n");
printf("\t1.查询全部\t2.学生ID\t3.学生姓名\n\t4.学生某门成绩\t5.学生总成绩\n");
printf("\t0.退出\n\n\n");
printf("\tPlease input a choose(1-0): ");
ch=getchar();getchar();

switch(ch)
{
case '1':
printf("\tID\t姓名\t成绩1\t成绩2\t成绩3\t总成绩\n");
printf("\t---------------------------------------------\n");
for(i=0;i<N;i++)
{
fread(&s[i],sizeof(s[i]),1,fp);
printf("\t%s\t%s\t",s[i].id,s[i].sname);

for(j=0;j<3;j++)
{
printf("%d\t",s[i].cj[j]);

}
printf("\n");
}
break;

case '2':
printf("输入学生ID号码: ");
scanf("%s",&x);

printf("\tID\t姓名\t成绩1\t成绩2\t成绩3\t总成绩\n");
for(i=0;i<N;i++)
{
fread(&s[i],sizeof(s[i]),1,fp);
if(x==s[i].id)
printf("\t%s\t%s\t",s[i].id,s[i].sname);
for(j=0;j<3;j++)
{
printf("%d\t",s[i].cj[j]);
}
printf("\n");
}
getchar();
break;

case '0':break;
default:
printf("\tError");
break;
}

getchar();
}
fclose(fp);
printf("\n\t查询完毕,按回车键返回\n");
}
--------------------------------------------------------------------
在read()中的case'2'这里出现问题,不知到怎么能正确的与结构体中的s[i].id进行对比 请大家教教
...全文
116 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
喵先生MJ 2008-05-08
  • 打赏
  • 举报
回复
明白了,谢谢大家了
喵先生MJ 2008-05-08
  • 打赏
  • 举报
回复
原来如此 ,谢谢你了jackiewlb
喵先生MJ 2008-05-08
  • 打赏
  • 举报
回复
原来如此 ,谢谢你了jackiewlb
jackiewlb 2008-05-08
  • 打赏
  • 举报
回复
学生结构体中定义的id是一个字符串
而你在接受输入的时候用的是下面这条语句
scanf("%s",&x);
x是一个char
因此指能保存用户输入的第一个字符
当然出现问题了!
babyvox1999 2008-05-08
  • 打赏
  • 举报
回复
strcmp
baihacker 2008-05-08
  • 打赏
  • 举报
回复
#include <stdio.h> 
#include <stdlib.h>
#include <string.h>//这里
#define N 4
void save();
void read();

typedef struct
{
char id[10];
char sname[11];
int cj[3];
}stud;

main()
{

char ch='1';
while(ch!='0')
{
system("cls");
printf("\n\t\t\t菜单选项\n\n");
printf("\t1.添加数据\t2.查询数据\t3.修改数据\n");
printf("\t0.退出\n\n\n");
printf("\tPlease input a choose(1-0): ");
ch=getchar();getchar();

switch(ch)
{
case '1':
save();
// printf("\tOk\n");
getchar();getchar();
break;
case '2':
read();
printf("\nPlease press enter\n");
getchar();getchar();
break;
case '3':
break;
case '0':
exit(0);
default:
printf("\tError again");
break;
}
}
}
void save()
{
stud stu[N];
int i,j,t=1;
FILE *fp;
char filename[90];
printf("请输入要保存的文件的路径: ");
scanf("%s",&filename);
fp=fopen(filename,"w");
if(fp==NULL)
{
printf("没有找到文件或者无法打开,程序退出\n\n");
// exit(0);
}
printf("信息输入开始:\n");
for(i=0;i <N;i++)
{
printf("\n输入ID : ");
scanf("%s",stu[i].id);
printf("\n输入姓名 : ");
scanf("%s",stu[i].sname);

stu[i].cj[0]=0;
for(j=0;j <3;j++)
{
printf("输入第%d门成绩 : ",t);
scanf("%d",&stu[i].cj[j]);
t++;
}
t=1;
fwrite(&stu[i],sizeof(stu[i]),1,fp);
}
printf("\n输入完成.....");
fclose(fp);
}
void read()
{
stud s[N];
int i,j;
FILE *fp;
char filename[90];
char ch='1';
char x[10];//这里
printf("请输入要查询的文件的路径: ");
scanf("%s",&filename);
fp=fopen(filename,"r");
if(fp==NULL)
{
printf("没有找到文件或者无法打开,程序退出\n\n");
}

while(ch!='0')
{
system("cls");
printf("\n\t\t\t查询菜单\n\n");
printf("\t1.查询全部\t2.学生ID\t3.学生姓名\n\t4.学生某门成绩\t5.学生总成绩\n");
printf("\t0.退出\n\n\n");
printf("\tPlease input a choose(1-0): ");
ch=getchar();getchar();

switch(ch)
{
case '1':
printf("\tID\t姓名\t成绩1\t成绩2\t成绩3\t总成绩\n");
printf("\t---------------------------------------------\n");
for(i=0;i <N;i++)
{
fread(&s[i],sizeof(s[i]),1,fp);
printf("\t%s\t%s\t",s[i].id,s[i].sname);

for(j=0;j <3;j++)
{
printf("%d\t",s[i].cj[j]);

}
printf("\n");
}
break;

case '2':
printf("输入学生ID号码: ");
scanf("%s",x); //这里

printf("\tID\t姓名\t成绩1\t成绩2\t成绩3\t总成绩\n");
for(i=0;i <N;i++)
{
fread(&s[i],sizeof(s[i]),1,fp);
if (!strcmp(x, s[i].id)) //这里
printf("\t%s\t%s\t",s[i].id,s[i].sname);
for(j=0;j <3;j++)
{
printf("%d\t",s[i].cj[j]);
}
printf("\n");
}
getchar();
break;

case '0':break;
default:
printf("\tError");
break;
}

getchar();
}
fclose(fp);
printf("\n\t查询完毕,按回车键返回\n");
}

70,037

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧