user-0 提问: 可以运行  到了第二步就不崩溃了【C语言】

回复:
user: user-1
content: printf里面的%和变量的一一对应关系 scanf里面的%和变量以及变量前加不加&的一一对应关系 是C代码中非常容易出错的地方，而且通常编译还不出错。 所以在编译源代码之前值得专门仔细检查一遍甚至多遍。  在每个最后不带\n的printf后面加fflush(stdout); 在每个不想受接收缓冲区旧内容影响的scanf前面加rewind(stdin); 另外请检查scanf的返回值。 //请今后要用 char c; scanf("%c",&c); //时，都改为 char s[2]; char c; scanf("%1s",s); c=s[0];

user: user-2
content: #include<stdio.h> #include<stdlib.h> #include<string.h> struct worker {     char No[20];  //职工号     char name[20];  //姓名     char sex;       //性别     int age;        //年龄     char xueli[10];  //学历     float gongzi;    //工资     char addr[32];     //地址     char tel[11];    //电话 };   //职工信息结构体 void face(); void input(); void save(struct worker wo[]); void chaxun(); void ghcx(); void xmcx(); void shanchu(); void ghsc(); void xmsc(); struct worker wo[100];  //职工的信息 int Number=0;  //记录职工人数 void face()   //操作面板 {     printf("\t\t\t\t=========湖北工程学院========\n\n");     printf("\t\t\t\t=====计算机信息与科学学院====\n\n");     printf("\t\t\t\t=======职工信息管理系统======\n\n");     printf("\t\t\t\t      1  输入职工信息        \n\n");     printf("\t\t\t\t      2  浏览职工信息        \n\n");     printf("\t\t\t\t      3  查询职工信息        \n\n");     printf("\t\t\t\t      4  删除职工信息        \n\n");     printf("\t\t\t\t      0      退出            \n\n"); }; void input()   //录入函数 {     int numberTemp=0;     int i = 0;     struct worker temp;     printf("请您输入要添加职工个数：");     scanf("%d",&numberTemp);     for (i = 0; i < numberTemp; i++)     {         printf("请输入工号:  ");         scanf("%s", temp.No);         printf("请输入姓名:  ");         scanf("%s", temp.name);         printf("请输入性别:  ");         scanf("%s",&temp.sex);         printf("请输入年龄:  ");         scanf("%d",&temp.age);         printf("请输入学历:  ");         scanf("%s", temp.xueli);         printf("请输入工资:  ");         scanf("%f",&temp.gongzi);         printf("请输入住址:  ");         scanf("%s", temp.addr);         printf("请输入电话:  ");         scanf("%s", temp.tel);         wo[Number++] = temp; //写入到数组         save(&temp); //写入到文件     }     printf("添加成功\n"); } void show()  //浏览职工信息 {     int i=0;     printf("\t工号\t姓名\t性别\t年龄\t学历\t工资\t地址\t电话\n");     while(i<Number)     {         printf("\t%s\t%s\t%c\t%d\t%s\t%f\t%s\t%s\n",wo[i].No,wo[i].name,wo[i].sex,wo[i].age,wo[i].xueli,wo[i].gongzi,wo[i].addr,wo[i].tel);         i++;     }  }  void ghcx()  //工号查询 {     int i;     char No[20];     printf("请输入要查询的工号\n");     scanf("%s", No);     for(i=0;i<Number;i++)     {         if (strcmp(No, wo[i].No) == 0)         {             printf("\t工号\t姓名\t性别\t年龄\t学历\t工资\t地址\t电话\n");             printf("\t%s\t%s\t%c\t%d\t%s\t%f\t%s\t%s\n",wo[i].No,wo[i].name,wo[i].sex,wo[i].age,wo[i].xueli,wo[i].gongzi,wo[i].addr,wo[i].tel);         }     } } void xmcx() //姓名查询 {     char name[20];     int i;     printf("请输入要查询的姓名\n");     scanf("%s", name);     for(i=0;i<Number;i++)     {         if(strcmp(name,wo[i].name)==0)         {             printf("\t工号\t姓名\t性别\t年龄\t学历\t工资\t地址\t电话\n");             printf("\t%s\t%s\t%c\t%d\t%s\t%f\t%s\t%s",wo[i].No,wo[i].name,wo[i].sex,wo[i].age,wo[i].xueli,wo[i].gongzi,wo[i].addr,wo[i].tel);         }     } } void chaxun() //查询职工信息 {     int x;     printf("1 按工号查询\t 2 按姓名查询\n");     scanf("%d", &x);     switch (x)     {         case 1:             ghcx();break;         case 2:             xmcx();break;         default:printf("输入错误!\n");chaxun();                 break;     } }  void ghsc()  //工号删除 { FILE *fp=NULL;     char No[20];     int i=0;     int j=0;     printf("请输入要删除的职工工号\n");     scanf("%s",No);     for (i=0; i<Number; i++)     {         if (strcmp(No, wo[i].No)==0)         {             for (j=i; j<Number-1; j++)             {                 wo[j] = wo[j+1];             }             Number--;         }     }     //将剩余数据写入文件擦除以前的数据     fp=fopen("C://worker.dat", "wb");     for (i = 0; i < Number; i++)     {         fwrite(&wo[i], sizeof(struct worker), 1, fp);     }     fclose(fp);     printf("删除成功！\n"); } void xmsc()  //姓名删除 {     FILE *fp = NULL;     char name[20];     int i = 0;     int j = 0;     printf("请输入要删除的职工姓名\n");     scanf("%s",name);     for (i=0; i<Number; i++)     {         if (strcmp(name, wo[i].name) == 0)         {             for (j=i; j <Number-1; j++)             {                 wo[j] = wo[j+1];             }             Number--;         }     }     //将剩余数据写入文件擦除以前的数据     fp = fopen("C://worker.dat", "wb");     for (i = 0; i < Number; i++)     {         fwrite(&wo[i], sizeof(struct worker), 1, fp);     }     fclose(fp);     printf("删除成功;\n"); } void shanchu()  //删除职工信息 {     int x;     printf("1 按工号删除\t 2 按姓名删除\n");     scanf("%d",&x);     switch (x)     {         case 1:             ghsc();break;         case 2:             xmsc();break;         default:printf("输入错误!\n");shanchu();                 break;     } } void main() {     int c = 0;     while (1)     {         face();         printf("\t\t请选择：");         scanf("%d", &c);         system("cls");         switch (c)         {             case 1:                 input();                 break;             case 2:                 show();                 break;             case 3:                 chaxun();                 break;             case 4:                 shanchu();                 break;             case 0:                 exit(0);                 break;             default:printf("输入错误！\n");main();         }     } } void save(struct worker *wo) {     FILE *fp=NULL;     fp=fopen("C://worker.dat","ab+");     fwrite(wo, sizeof(struct worker),1,fp);     fclose(fp); }

user: user-2
content: printf("请输入工号:  ");         scanf("%s", temp.No);         printf("请输入姓名:  ");         scanf("%s", temp.name);         printf("请输入性别:  ");         scanf("%s",&temp.sex);         printf("请输入年龄:  ");         scanf("%d",&temp.age);         printf("请输入学历:  ");         scanf("%s", temp.xueli);         printf("请输入工资:  ");         scanf("%f",&temp.gongzi);         printf("请输入住址:  ");         scanf("%s", temp.addr);         printf("请输入电话:  ");         scanf("%s", temp.tel); 输入有误，学号和姓名都是字符串，字符数组名本身就是地址。  struct worker {     char No[20];  //职工号     char name[20];  //姓名     char sex;       //性别     int age;        //年龄     char xueli[10];  //学历     float gongzi;    //工资     char addr[32];     //地址     char tel[12];    //电话 };   //职工信息结构体 结构体也做了修改；  其他问题，主要是对于字符串要用%s个数输入，对于char要用%c或者%d格式输出。对于int，要用%d格式输入； 问题，不一一给你罗列了。对于稍微复杂的程序，建议每写完一个功能都进行编译和测试。

user: user-0
content: 引用 1 楼 自信男孩的回复:printf("请输入工号:  ");         scanf("%s", temp.No);         printf("请输入姓名:  ");         scanf("%s", temp.name);         printf("请输入性别:  ");         scanf("%s",&temp.sex);         printf("请输入年龄:  ");         scanf("%d",&temp.age);         printf("请输入学历:  ");         scanf("%s", temp.xueli);         printf("请输入工资:  ");         scanf("%f",&temp.gongzi);         printf("请输入住址:  ");         scanf("%s", temp.addr);         printf("请输入电话:  ");         scanf("%s", temp.tel); 输入有误，学号和姓名都是字符串，字符数组名本身就是地址。  struct worker {     char No[20];  //职工号     char name[20];  //姓名     char sex;       //性别     int age;        //年龄     char xueli[10];  //学历     float gongzi;    //工资     char addr[32];     //地址     char tel[12];    //电话 };   //职工信息结构体 结构体也做了修改；  其他问题，主要是对于字符串要用%s个数输入，对于char要用%c或者%d格式输出。对于int，要用%d格式输入； 问题，不一一给你罗列了。对于稍微复杂的程序，建议每写完一个功能都进行编译和测试。 我一直以为是储存的原因。非常感谢。

user: user-0
content: 引用 1 楼 自信男孩的回复:printf("请输入工号:  ");         scanf("%s", temp.No);         printf("请输入姓名:  ");         scanf("%s", temp.name);         printf("请输入性别:  ");         scanf("%s",&temp.sex);         printf("请输入年龄:  ");         scanf("%d",&temp.age);         printf("请输入学历:  ");         scanf("%s", temp.xueli);         printf("请输入工资:  ");         scanf("%f",&temp.gongzi);         printf("请输入住址:  ");         scanf("%s", temp.addr);         printf("请输入电话:  ");         scanf("%s", temp.tel); 输入有误，学号和姓名都是字符串，字符数组名本身就是地址。  struct worker {     char No[20];  //职工号     char name[20];  //姓名     char sex;       //性别     int age;        //年龄     char xueli[10];  //学历     float gongzi;    //工资     char addr[32];     //地址     char tel[12];    //电话 };   //职工信息结构体 结构体也做了修改；  其他问题，主要是对于字符串要用%s个数输入，对于char要用%c或者%d格式输出。对于int，要用%d格式输入； 问题，不一一给你罗列了。对于稍微复杂的程序，建议每写完一个功能都进行编译和测试。 我一直以为是储存的原因。非常感谢。