局部变量定义是非法的,遇到意外的文件结尾两个错误怎么改
#include "stdio.h"
#include "string.h"
#include "stdlib.h"
typedef struct student
{
int qinshi;
int chuangwei;
char name[20];
char phone[12];
long num;
}STU;
void shuru()
{ int i,n;
STU a;
FILE *fp;
fp=fopen("C:\\学生宿舍系统.dat","wb");
if(fp==NULL)
{
printf("!");
return;
}
system("cls");
printf("录入的个数是: ");
scanf("%d",&n);
for(i=0;i<n;i++)
{
printf("\t寝室号:");
scanf("%d",&a.qinshi);
printf("\t床位:");
scanf("%d",&a.chuangwei);
printf("\t姓名:");
scanf("%s",a.name);
printf("\t手机号:");
scanf("%s",a.phone);
printf("\t学号:");
scanf("%ld",&a.num);
fwrite(&a,sizeof(STU),1,fp);
}
fclose(fp);
}
void zhuijia()
{
int i,n;
STU a;
FILE *fp;
system("cls");
if((fp=fopen("C:\\学生宿舍系统.dat","ab"))==NULL)
{printf("error!\n");exit(0);}
printf("\n\n\t请输入追加人数:");
scanf("%d",&n);
for(i=0;i<n;i++)
{
printf("\t寝室号:");
scanf("%d",&a.qinshi);
printf("\t床位:");
scanf("%d",&a.chuangwei);
printf("\t姓名:");
scanf("%s",a.name);
printf("\t手机号:");
scanf("%s",a.phone);
printf("\t学号:");
scanf("%ld",&a.num);
fwrite(&a,sizeof(STU),1,fp);
}
fclose(fp);
}
void xianshi()
{STU a;
FILE*fp;
system("cls");
if((fp=fopen("C:\\学生宿舍系统.dat","rb"))==NULL)
{
printf("error!\n");exit(0);
}
rewind(fp);
printf("\n\n\n\t\b\b寝室号\t床位\t姓名\t 手机号\t学号\n");
while(fread(&a,sizeof(STU),1,fp)!=0)
printf("%d\t%d\t%s\t%s\t%ld\n",a.qinshi,a.chuangwei,a.name,a.phone,a.num);
fclose(fp);
}
void chaxunbyname()
{
int f=0;
char na[20];
STU a;
FILE *fp;
fp=fopen("C:\\学生宿舍系统.dat","rb");
if(fp==NULL)
{printf("无法打开!\n");exit(1);}
printf("请输入要查找姓名:");
scanf("%s",na);
while(fread(&a,sizeof(STU),1,fp)!=0)
if(strcmp(na,a.name)==0)
{
printf("寝室号\t床位\t姓名\t 手机号\t学号\n");
printf("%d\t%d\t%s\t%s\t%ld\n",a.qinshi,a.chuangwei,a.name,a.phone,a.num);
f=1;
}
if(f==0) printf("没有该学生信息。");
fclose(fp);
}
void chaxunbyxuehao()
{
int f=0,x=0;
STU a;
FILE *fp;
fp=fopen("C:\\学生宿舍系统.dat","rb");
if(fp==NULL)
{printf("打开失败!\n");exit(1);
scanf("%d",&x);
while(fread(&a,sizeof(STU),1,fp)!=0)
if(x==a.num)
{
printf("寝室号\t床位\t姓名\t 手机号\t学号\n");
printf("%d\t%d\t%s\t%s\t%ld\n",a.qinshi,a.chuangwei,a.name,a.phone,a.num);
f=1;
}
if(f==0) printf("没有该寝室的信息。");
fclose(fp);
}
void chaxun()
{
int a;
system("cls");
printf("\n\n\t\t你现在已经进入学生宿舍管理系统\n");
printf("\t\t\t按姓名查询输入1\n");
printf("\t\t\t按学号查询输入2\n");
printf("\t\t\t退出输入3\n");
printf("\t\t\t请输入命令: ");
scanf("%d",&a);
switch(a)
{
case1:chaxunbyname();break;
case2:chaxunbyxuehao();break;
caea3:break;
}
}
void shanchu()
{
int s;
struct student a[10];
int i=0, n, f=0, k;
long num;
FILE *fp;
printf("\t\t\t 请输人管理密码!");
scanf("%d", &s);
if(s!=0)printf("管理密码错误!");
else
{
fp=fopen("C:\\学生宿舍系统.dat","r");
if (fp==NULL)
{
printf("打开C:\\学生宿舍系统.dat失败!\n");
exit(1);
}
fseek (fp,0,2) ;
n=ftell(fp)/sizeof(struct student) ;
rewind (fp);
printf("输人学号:");
scanf ("%ld", &num);
for(i=0;i<n;i++)
fread (&a[i], sizeof (STU) , 1, fp);
for(i=0;i<n;i++)
if (num==a[i].num)
{
printf("按任意键删除");
f=1;
k=1;
break;
}
else
f=0;
fclose (fp) ;
if(f==0)
printf("未找到对应学生信息\n");
else
{
for(i=k;i<n-1;i++)
a[i]=a[i+1];
n--;
fp=fopen("C:\\学生宿舍系统.dat","w");
if (fp==NULL)
{
printf("打开C:\\学生宿舍系统.dat 失败!\n");
exit(1);
}
for (i=0;i<n;i++)
fwrite (&a[i], sizeof(struct student),1,fp);
fclose(fp);
}
getchar();getchar();
}
}
void main()
{
int a;
do
{
printf("\n\n\n\t\t\t欢迎进入学生宿舍系统");
printf("\t\t\t\t\t\t\t录入学生信息输入1\n");
printf("\t\t\t显示学生信息信息输入2\n");
printf("\t\t\t查询学生信息输入3\n");
printf("\t\t\t追加学生信息输入4\n");
printf("\t\t\t删除学生信息输入5\n");
printf("\t\t\t退出系统输入7\n");
printf("\t\t\t输入命令: ");
scanf("%d",&a);
switch(a)
{
case 1:shuru();break;
case 2:xianshi();break;
case 3:chaxun();break;
case 4:zhuijia();break;
case 5:shanchu();break;
case 7:exit(0);
}
}while(a!=0);
}
有两个错误需要修复:
局部变量定义错误:
在函数chaxun()
中,case1
和case2
的定义应该改为case 1
和case 2
,即添加空格,以正确定义case
语句。
switch(a)
{
case 1: chaxunbyname(); break;
case 2: chaxunbyxuehao(); break;
case 3: break;
}
意外的文件结尾错误:
在函数chaxunbyxuehao()
中,有一个错误的大括号位置,应将scanf("%d",&x);
放在if
语句的外面。
void chaxunbyxuehao()
{
int f=0, x=0;
STU a;
FILE *fp;
fp=fopen("C:\\学生宿舍系统.dat","rb");
if(fp==NULL)
{
printf("打开失败!\n");
exit(1);
}
scanf("%d",&x);
while(fread(&a,sizeof(STU),1,fp)!=0)
{
if(x==a.num)
{
printf("寝室号\t床位\t姓名\t 手机号\t学号\n");
printf("%d\t%d\t%s\t%s\t%ld\n",a.qinshi,a.chuangwei,a.name,a.phone,a.num);
f=1;
}
}
if(f==0) printf("没有该寝室的信息。");
fclose(fp);
}
char *match( char *s, char ch1, char ch2 );
函数match
应打印s
中从ch1
到ch2
之间的所有字符,并且返回ch1
的地址。
对于问题1:局部变量被判定为非法,可以根据编程语言的规则和错误提示来进行解决。
一般情况下,局部变量被判定为非法是因为变量的作用域或定义方式出现问题。
作用域问题:检查变量的作用域,确保变量在使用之前已经被声明和定义。在循环、条件语句或函数内部使用局部变量时,需要确保变量在使用之前已经被声明。
定义方式问题:检查变量的定义方式,确保变量的类型和命名符合编程语言的规范。一些常见的错误包括使用了已经定义的关键字作为变量名、变量名包含特殊字符等。此外,还要确保变量的声明与实际的使用类型匹配。
例如,在C语言中,如果遇到局部变量非法的问题,可以检查以下几个方面:
对于问题2:意外的文件结尾错误,可以根据编程语言的规则和错误提示来进行解决。
意外的文件结尾错误一般是因为文件不完整或语法错误导致的。以下是一些常见的解决方法:
检查文件是否完整:确保所有的代码都已经被写入文件中,并且没有遗漏。
检查代码语法:使用编程语言的编译器或解释器来检查代码语法错误,确保代码中没有语法错误。
检查代码逻辑:检查代码中的逻辑错误,确保程序的流程和操作是正确的。有时候意外的文件结尾错误是由于代码逻辑错误导致的。
如果以上方法都没有解决问题,可以考虑以下几点:
请注意,具体的解决方法和代码示例可能因编程语言和具体情况而异。所以在实际解决问题时,建议结合具体的代码和错误提示来进行分析和解决。如果以上方法都没有解决问题,我们可能需要更多的详细信息才能确切找到问题的原因和解决方案。