c語言課設(shè)的一段代碼,,寫了一小塊,,編譯通過了,,可是輸入信息卻有問題,,,,,,,,希望大佬能告訴我什么原因
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<windows.h>
typedef struct Student
{
int number[4];
char name[20];
char sex;
int grade;
char major[20];
}Student;//學(xué)生信息(學(xué)號,,姓名,性別,,年級,,專業(yè))
typedef struct Lstudent
{
Student *stu;
Lstudent *next;
}Lstudent,*Linkliststu;//學(xué)生信息鏈表節(jié)點(diǎn)的定義
Lstudent *s_head=NULL;
void LinklistCreat()
{
FILE *fp1;
char ch;
if((fp1=fopen("stu.dat","wb"))==NULL)
{
printf("cannot open the file");
return;
}
Lstudent *p=s_head;//當(dāng)前結(jié)點(diǎn)
do{while(s_head!=NULL&&p->next!=NULL)
{p=p->next;}
Lstudent *node=(Lstudent *)malloc(sizeof(Lstudent));//創(chuàng)建一個新節(jié)點(diǎn)
if(s_head==NULL)
{s_head=node;}
else
{p->next=node;}
printf("輸入該學(xué)生的學(xué)號:");
scanf("%s",node->stu->number);
printf("輸入該學(xué)生的姓名:");
scanf("%s",node->stu->name);
printf("輸入該學(xué)生的性別:");
scanf("%c",&node->stu->sex);
printf("輸入該學(xué)生的年級:");
scanf("%d",&node->stu->grade);
printf("輸入該學(xué)生的專業(yè):");
scanf("%s",node->stu->major);
printf("學(xué)生信息錄入成功");
node->next=NULL;
if(fwrite(node,sizeof(struct Lstudent),1,fp1)!=1)
printf("cannot open the file");
printf("是否繼續(xù)輸入 y or n");
ch=getchar();}while(ch=='y'||ch=='Y');
}//添加學(xué)生信息加入鏈表——從尾部加入--并存入文件fp1中--"stu.dat"
void LinklistChange()
{
Lstudent *q=s_head;
int b=0;
char ck;
int ch[4];
FILE *fp;//原文件指針
FILE *fp2;//暫時文件指針
do{if((fp=fopen("stu.dat","wb"))==NULL)
{
printf("cannot open the file");
return;
}
if((fp2=fopen("temp.dat","wb"))==NULL)
{
printf("cannot open the file");
return;
}
printf("請輸入要修改學(xué)生信息的學(xué)號");
scanf("%s",ch);
while(fread(q,sizeof(struct Lstudent),1,fp)==1)
{
if(q->stu->number==ch)
{
b++;
printf("學(xué)號,,姓名,性別,,年級,,專業(yè)");
printf("%s,%s,%c,%d,%s",q->stu->number,q->stu->name,q->stu->sex,q->stu->grade,q->stu->major);
printf("請輸入新的學(xué)生信息");
printf("請輸入新的學(xué)號:");
scanf("%s",&q->stu->number);
printf("請輸入新的姓名:");
scanf("%s",&q->stu->name);
printf("請輸入新的性別:");
scanf("%c",&q->stu->sex);
printf("請輸入新的年級:");
scanf("%s",&q->stu->grade);
printf("請輸入新的專業(yè):");
scanf("%s",&q->stu->major);
fwrite(q,sizeof(struct Lstudent),1,fp2);
q=q->next;
}
else
{
fwrite(q,sizeof(struct Lstudent),1,fp2);
q=q->next;
}
}
if(b==0)
printf("修改失敗,沒有找到相關(guān)信息");
rewind(fp);
q=s_head;//如果繼續(xù)修改的話,,要把標(biāo)記移動到文件開頭
printf("是否要繼續(xù)修改 y or n");
ck=getchar();
fclose(fp);
fclose(fp2);
remove("stu.dat");
rename("temp.dat","stu.dat");}while(ck=='y'||ck=='Y');
if(b==1)
printf("修改成功");
}//修改學(xué)生信息--定義另一個文件,,把要修改的信息放到該文件中,然后把其余的信息復(fù)制到該文件中;
//然后把其余的信息復(fù)制到該文件中;并把該文件從新命名為原來的名字并把原來的文件移除
void LinklistDelete()
{
int b=0;
Lstudent *q=s_head;
FILE *fp3;//原文件指針
FILE *fp4;//暫時文件指針
int ch[4];
char ck;
do{if((fp3=fopen("stu.dat","wb"))==NULL)
{
printf("cannot open the file");
return;
}
if((fp4=fopen("temp.dat","wb"))==NULL)
{
printf("cannot open the file");
return;
}
printf("請輸入要刪除的學(xué)生的編號");
scanf("%s",ch);
while(fread(q,sizeof(struct Lstudent),1,fp3))
{
if(q->stu->number!=ch)
{
fwrite(q,sizeof(struct Lstudent),1,fp4);
q=q->next;
}
else
{q=q->next;
b++;
}
}
if(b==0)
printf("刪除失敗");
rewind(fp3);
fclose(fp3);
fclose(fp4);
remove("stu.dat");
rename("temp.dat","stu.dat");
printf("是否需要繼續(xù)刪除 y or n");
ck=getchar();}while(ck=='y'||ck=='Y');
if(b==1)
printf("刪除成功");
}//刪除學(xué)生信息--原理與修改類似
void main()
{
char ch;
printf("*******學(xué)生興趣愛好管理系統(tǒng)*******");
printf("***輸入1--添加興趣類別***");
printf("***輸入2--刪除興趣類別***");
printf("***輸入3--修改興趣類別***");
printf("***輸入4--添加興趣項(xiàng)***");
printf("***輸入5--刪除興趣項(xiàng)***");
printf("***輸入6--修改興趣項(xiàng)***");
printf("***輸入7--添加學(xué)生信息***");
printf("***輸入8--刪除學(xué)生信息***");
printf("***輸入9--修改學(xué)生信息***");
printf("***輸入10--給學(xué)生添加興趣***");
printf("***輸入11--刪除學(xué)生的興趣***");
printf("***輸入12--輸入學(xué)號查詢該學(xué)生的信息和號碼***");
printf("***輸入13--輸入愛好查出有此愛好的學(xué)生信息***");
scanf("%c",&ch);
switch(ch)
{
case '1'://添加興趣類別
break;
case '2'://刪除興趣類別
break;
case '3'://修改興趣類別
break;
case '4'://添加興趣項(xiàng)
break;
case '5'://刪除興趣項(xiàng)
break;
case '6'://修改興趣項(xiàng)
break;
case '7'://添加學(xué)生信息
LinklistCreat();
break;
case '8'://刪除學(xué)生信息
LinklistDelete();
break;
case '9'://修改學(xué)生信息
LinklistChange();
break;
case '10'://給學(xué)生添加興趣
break;
case '11'://刪除學(xué)生的興趣
break;
case '12'://輸入學(xué)號查詢該學(xué)生的信息和號碼
break;
case '13'://輸入愛好查出有此愛好的學(xué)生信息
break;
default : printf("輸入數(shù)據(jù)錯誤,,請重新輸入");
}
}
程序至少有一個問題
c語言的char只能處理單個字符,不能用
case '10':
這樣的寫法的,若你要實(shí)現(xiàn)你的功能,改
char ch;
為
int ch;
然后用
scanf("%d",&ch);
及
case 1:
....
case 2:
....
case 10:
....
case 11:
....