下面这个程序~我怎么改都不对`大家帮忙搞下~谢谢大家了~
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 50
struct studentinfo{ //学生的基本信息
int cnum;
char name[10];
float CH,MA,EN;
}stu[N];
struct registerinfo{//注册的信息
char name[20];
char password[18];
}reg[20];
int total=0;
FILE *rfp;
FILE *sfp;
int k;
int n=0;
int z;
char b1[]=”1—-查看所有学生的信息”;
char b2[]=”2—-根据学号查看学生的信息”;
char b4[]=”4—-请选择”;
char b3[]=”3—-退出”;
void lookall();
void looksomeone();
void zhuce()//注册
{
int i;
char pass_zc[20]=”",pass2[20]=”";
char user_zc[20]=”";
while(1)
{
printf(“输入用户名\n”);
gets(user_zc);
for(i=0;i<total;i++)
if (strcmp(reg[i].name,user_zc)!=0)
i++;
else{
printf(“用户已存在!”);
return;
}
strcpy(reg[total].name,user_zc);
printf(“输入口令\n”);
gets(pass_zc);
printf(“确认口令\n”);
gets(pass2);
if (strcmp(pass_zc,pass2)!=0)
{
printf(“口令不一致,重新注册\n”);
continue;
}
else
{
strcpy(reg[total].password,pass_zc);
printf(“注册成功\n”);
if((rfp=fopen(“Registerinfo.txt”,”a+”))==NULL)//将用户写入文件中
{ printf(“cannot openfile\n”);
return;
}
fwrite(®[total],sizeof(struct registerinfo),1,rfp);
total++;
break;
}
}
}
void log()//登录
{ int i=0,count=0;
char user_dl[20]=”";
char pass_dl[20]=”";
rfp=fopen(“Registerinfo.dat”,”rb”);
rewind(rfp);
for(i=0;i<100;i++) //从注册文件中进行用户校检
{ fread(®[i].name,20,1,rfp);
fread(®[i].password,18,1,rfp);
}
while(count<=3)
{
printf(“输入用户名\n”);
gets(user_dl);
i=0;
while(i<total)
if (strcmp(reg[i].name,user_dl)!=0)
i++;
else
break;
if (i==total)
{
printf(“没有这个用户,重新输入\n”);
count=0;
continue;
}
printf(“输入口令\n”);
gets(pass_dl);
fflush(stdin);
count++;
if (strcmp(reg[i].password,pass_dl)!=0)
{
printf(“口令错误,重新输入\n”);
continue;
}
else
{
printf(“登录成功\n”);
break;
}
}
}
void addstu()//这里是加入学生的信息
{ printf(“查看学生信息请登录!”);
log();
if((sfp=fopen(“stuinfo.txt”,”a+”))==NULL)
{ printf(“cannot open file!”);
return;
}
printf(“请输入学生的信息!学生信息包括学生学号、姓名、语、数、外!\n”);
for(z=0;z<N;z++)
{ printf(“number:\n”);scanf(“%d”,&stu[z].cnum);
printf(“name:\n”);scanf(“%s”,stu[z].name);
printf(“yuwen:\n”);scanf(“%f”,&stu[z].CH);
printf(“shuxue:\n”);scanf(“%f”,&stu[z].MA);
printf(“english:\n”);scanf(“%f”,&stu[z].EN);
}
for(z=0;z<N;z++)
fwrite(&stu[z],sizeof(struct studentinfo),1,sfp);/*写入文件*/
rewind(sfp);
printf(“以下所输入的学生信息\n”);
for(z=0;z<N;z++)
{ fread(&stu[z],sizeof(struct studentinfo),1,sfp);
printf(“%4 d%-10s%f %f %f\n”,stu[z].cnum,stu[z].name,stu[z].CH,stu[z].MA,stu[z].EN);
}
fclose(sfp);
}
void lookstu()//查看学生的信息
{ printf(“查看学生信息请登录!”);
log();
printf(“%s\n”,b1);
printf(“%s\n”,b2);
printf(“%s\n”,b3);
printf(“%s”,b4);
scanf(“%d”,&n);
switch(n)
{
case 1: lookall();break;
case 2: looksomeone();break;
case 3:exit(1);
default: printf(“选择无效!”);break;
}
void lookall()//查看所有的学生信息
{ sfp=fopen(“stuinfo.dat”,”rb”);
for(k=0;k<N;k++)
{ fread(&stu[k],sizeof(struct studentinfo),1,sfp);
printf(“%4d%-10s%f%f%f\n”,stu[k].cnum,stu[k].name,stu[k].CH,stu[k].MA,stu[k].EN);
}
fclose(sfp);
}
void looksomeone()//查看哪一个人的信息
{
int l;
{
sfp=fopen(“stuinfo.dat”,”rb”);
rewind(sfp);
printf(“请输入要查的学号:”);
scanf(“%d”,&l);
l=26*(l-1);
fseek(sfp,l+4,0);
fread(stu[l].name,10,1,sfp);
fread(&stu[l].CH,4,1,sfp);
fread(&stu[l].MA,4,1,sfp);
fread(&stu[l].EN,4,1,sfp);
printf(“%s %d %d %d\n”,stu[l].name,stu[l].CH,stu[l].MA,stu[l].EN);
}
fclose(sfp);
}
}
void countstu()//对学生数据进行计算
{ printf(“查看学生信息请登录!”);
log();
int c;
char c1[]=”1——对每个学生的各科进行求和”;
char c2[]=”2——求每个学生的平均成绩”;
char c3[]=”3——请选择”;
char c4[]=”4——退出”;
printf(“%s\n”,c1);
printf(“%s\n”,c2);
printf(“%s\n”,c4);
printf(“%s”,c3);
scanf(“%d”,&c);
fflush(stdin);
switch(c)
{ case 1:sumstu();break;
case 2:avestu();break;
case 3:exit(1);
default:printf(“选择无效”);
}
void sumstu()//进行和运算
{ int s,sum[N];
for(s=0;s<N;s++)
{ fread(&stu[s],sizeof(struct studentinfo),1,sfp);
printf(“%4d%-10s%f%f%f\n”,stu[s].cnum,stu[s].name,stu[s].CH,stu[s].MA,stu[s].EN);
}
for(s=1;s<N;s++)
sum[s]=stu[s].CH+stu[s].MA+stu[s].EN;
for(s=1;s<N;s++)
printf(“第%d个的总分为:%d\n”,s,sum[s]);
}
void avestu()//进行平均值
{ for(a=0;a<N;a++)
{ fread(&stu[a],sizeof(struct studentinfo),1,sfp);
printf(“%4d%-10s%f%f%f\n”,stu[a].cnum,stu[a].name,stu[a].CH,stu[a].MA,stu[a].EN);
}
for(a=1;a<N;a++)
{ sum[a]=stu[a].CH+stu[a].MA+stu[a].EN;
ave[a]=sum[a]/3;
printf(“第i个人的平均分为:%d\n”,a,ave[a]);
}
}
}
main()
{ char a1[]=”1——register”;
char a2[]=”2——-login”;
char a3[]=”3——add stuinformation”;
char a4[]=”4——lookstudentinfo”;
char a5[]=”5——-countstudentinfo”;
char a6[]=”0——out”;
char a7[]=”7——chang one:”;
int i=0;
void zhuce();
void log();
void addstu();
void lookstu();
void countstu();
while(1)
{
printf(“%s\n”,a1);
printf(“%s\n”,a2);
printf(“%s\n”,a3);
printf(“%s\n”,a4);
printf(“%s\n”,a6);
printf(“%s”,a7);
scanf(“%d”,&i);
fflush(stdin);
switch(i)
{
case 1: zhuce();break;
case 2: log();break
case 3: addstu();break;
case 4: lookstu();break;
case 5: countstu();break;
case 0: exit(1);
default: printf(“选择无效\n”);
}
}
}
下面是出错的信息:
:\Documents and Settings\l\桌面\新建文件夹\456.c(167) : error C2143: syntax error : missing ‘;’ before ‘type’
C:\Documents and Settings\l\桌面\新建文件夹\456.c(196) : error C2059: syntax error : ‘}’
C:\Documents and Settings\l\桌面\新建文件夹\456.c(272) : error C2143: syntax error : missing ‘;’ before ‘case’
Error executing cl.exe.
我用的是visual c++的编译器~
>> 本文固定链接: http://www.vcgood.com/archives/2980
第一个错误456.c(167) : error C2143: syntax error : missing ‘;’ before ‘type’是因为函数“void countstu()//对学生数据进行计算”最后少了一个结束}
第二个错误是因为以下这个函数的花括弧有问题:
void looksomeone()//查看哪一个人的信息
{
int l;
{
sfp=fopen(“stuinfo.dat”,”rb”);
rewind(sfp);
printf(“请输入要查的学号:”);
scanf(“%d”,&l);
l=26*(l-1);
fseek(sfp,l+4,0);
fread(stu[l].name,10,1,sfp);
fread(&stu[l].CH,4,1,sfp);
fread(&stu[l].MA,4,1,sfp);
fread(&stu[l].EN,4,1,sfp);
printf(“%s %d %d %d\n”,stu[l].name,stu[l].CH,stu[l].MA,stu[l].EN);
}
fclose(sfp);
}
}
应更正为:
void looksomeone()//查看哪一个人的信息
{
int l;
sfp=fopen(“stuinfo.dat”,”rb”);
rewind(sfp);
printf(“请输入要查的学号:”);
scanf(“%d”,&l);
l=26*(l-1);
fseek(sfp,l+4,0);
fread(stu[l].name,10,1,sfp);
fread(&stu[l].CH,4,1,sfp);
fread(&stu[l].MA,4,1,sfp);
fread(&stu[l].EN,4,1,sfp);
printf(“%s %d %d %d\n”,stu[l].name,stu[l].CH,stu[l].MA,stu[l].EN);
fclose(sfp);
}
第三个错误是因为在main函数中case 2: log();break语句最后少了一个分号