c语言课设的一段代码,写了一小块,编译通过了,可是输入信息却有问题,,,,,希望大佬能告诉我什么原因 - 爱问答

(爱问答)

c语言课设的一段代码,写了一小块,编译通过了,可是输入信息却有问题,,,,,希望大佬能告诉我什么原因

#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;//学生信息(学号,姓名,性别,年级,专业)

typedef struct Lstudent

{

Student *stu;

Lstudent *next;

 

}Lstudent,*Linkliststu;//学生信息链表节点的定义

 

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;//当前结点

    do{while(s_head!=NULL&&p->next!=NULL)

{p=p->next;}

Lstudent *node=(Lstudent *)malloc(sizeof(Lstudent));//创建一个新节点

if(s_head==NULL)

{s_head=node;}

else

{p->next=node;}

printf("输入该学生的学号:");

scanf("%s",node->stu->number);

    printf(" 输入该学生的姓名:");

scanf("%s",node->stu->name);

printf(" 输入该学生的性别:");

scanf("%c",&node->stu->sex);

printf(" 输入该学生的年级:");

scanf("%d",&node->stu->grade);

printf(" 输入该学生的专业:");

    scanf("%s",node->stu->major);

printf("学生信息录入成功");

node->next=NULL;

if(fwrite(node,sizeof(struct Lstudent),1,fp1)!=1)

printf("cannot open the file");

printf("是否继续输入 y or n");

ch=getchar();}while(ch=='y'||ch=='Y');

 

}//添加学生信息加入链表——从尾部加入--并存入文件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("请输入要修改学生信息的学号");

scanf("%s",ch);

while(fread(q,sizeof(struct Lstudent),1,fp)==1)

{

if(q->stu->number==ch)

{

b++;

printf("学号,姓名,性别,年级,专业");

printf("%s,%s,%c,%d,%s",q->stu->number,q->stu->name,q->stu->sex,q->stu->grade,q->stu->major);

printf("请输入新的学生信息");

printf("请输入新的学号:");

scanf("%s",&q->stu->number);

            printf(" 请输入新的姓名:");

scanf("%s",&q->stu->name);

            printf(" 请输入新的性别:");

scanf("%c",&q->stu->sex);

            printf(" 请输入新的年级:");

scanf("%s",&q->stu->grade);

            printf(" 请输入新的专业:");

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("修改失败,没有找到相关信息");

rewind(fp);

q=s_head;//如果继续修改的话,要把标记移动到文件开头

printf("是否要继续修改 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("修改成功");

 

}//修改学生信息--定义另一个文件,把要修改的信息放到该文件中,然后把其余的信息复制到该文件中;

//然后把其余的信息复制到该文件中;并把该文件从新命名为原来的名字并把原来的文件移除

 

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("请输入要删除的学生的编号");

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("是否需要继续删除 y or n");

ck=getchar();}while(ck=='y'||ck=='Y');

if(b==1)

printf("删除成功");

}//删除学生信息--原理与修改类似

 

 void main()

{

char ch;

printf("*******学生兴趣爱好管理系统******* ");

printf("***输入1--添加兴趣类别*** ");

printf("***输入2--删除兴趣类别*** ");

printf("***输入3--修改兴趣类别*** ");

printf("***输入4--添加兴趣项*** ");

printf("***输入5--删除兴趣项*** ");

printf("***输入6--修改兴趣项*** ");

printf("***输入7--添加学生信息*** ");

printf("***输入8--删除学生信息*** ");

printf("***输入9--修改学生信息*** ");

printf("***输入10--给学生添加兴趣*** ");

printf("***输入11--删除学生的兴趣*** ");

printf("***输入12--输入学号查询该学生的信息和号码*** ");

printf("***输入13--输入爱好查出有此爱好的学生信息*** ");

scanf("%c",&ch);

switch(ch)

{

case '1'://添加兴趣类别

break;

    case '2'://删除兴趣类别

break;

case '3'://修改兴趣类别

break;

    case '4'://添加兴趣项

break;

    case '5'://删除兴趣项

break;

    case '6'://修改兴趣项

break;

    case '7'://添加学生信息

          LinklistCreat();

break;

    case '8'://删除学生信息

          LinklistDelete();

break;

    case '9'://修改学生信息

          LinklistChange();

break;

    case '10'://给学生添加兴趣

break;

    case '11'://删除学生的兴趣

break;

    case '12'://输入学号查询该学生的信息和号码

break;

    case '13'://输入爱好查出有此爱好的学生信息

break;

default : printf("输入数据错误,请重新输入");

 

}

 

}


程序至少有一个问题

c语言的char只能处理单个字符,不能用

case '10':

 这样的写法的,若你要实现你的功能,改

char ch;

int ch;

然后用

scanf("%d",&ch);

case 1:

....

case 2:

....

case 10:

....

case 11:

....


相关标签:c语言

下一篇:c#一个方法中要输出两个double[]数组?输出的数组长度不定,怎么解决?

上一篇:霍金哪些预言实现了

热门标签:
excel 网盘 破解 word dll
最新更新:
微软重新评估新的Outlook的使用时机 联想推出搭载联发科Helio G80芯片组的Tab M9平板 英特尔创新大赛时间确定! 微软Edge浏览器在稳定渠道中推出Workspaces功能 英伟达RTX4060TiGPU推出MaxSun动漫主题! 谷歌地图为用户提供了街景服务! GameSir 在T4 Kaleid中推出了一款出色的控制器! 微软开始在Windows 11 中测试其画图应用程序的新深色模式! LG电子推出全球首款无线OLED电视 英伟达人工智能芯片崭露头角! Steam Deck可以玩什么游戏-Steam Deck价格限时优惠 雷蛇推出CobraPro鼠标 Kindle电子阅读器可以访问谷歌商店吗 Windows10如何加入组策略 window10图片查看器怎么没有了?