问问大家 为什么我这个程序运行不了啊

一开始运行过两遍。然后直接显示不了了。


#include <stdio.h>#include <stdlib.h>#include <string.h>#define N 15struct Emploee{ int id; // < 职工号 > char name[ 15 ]; // < 姓名 > float baseSal; float postSal; float allowance; float medical; float accumulationFund; float waterAndElec; float totalSal; float salary;} emp[ N ], // < book[N]结构体数组 > s;char str[ 180 ]; //< 字符数组,存放标题 > int M; //< 全局变量,保存结构体数组中的数据条数 > void query_name( ){ printf( "请输入您要查询的职工姓名\n" ); char name[ 20 ]; int i; scanf( "%s", name ); for( i = 0; i < M; i++ ){ s = emp[ i ]; if( strcmp( name, s.name ) == 0 ) { printf( "%s", str ); printf( "%-5d %-6s %-8.2f %-8.2f %-8.2f %-8.2f %-8.2f %-8.2f %-8.2f %8.2f\n", s.id, s.name, s.baseSal, s.postSal, s.allowance, s.medical, s.accumulationFund, s.waterAndElec, s.totalSal, s.salary ); break; } }/ 如果这里成立,就代表结构体数组遍历完都没有找到与输入的名字相符 if( i == M ) { printf( "没有此员工信息\n" ); }}void query_id( ){ printf( "请输入您要查询的职工工号\n" ); int id; int i; scanf( "%d", &id ); for( i = 0; i < M; i++ ) { s = emp[ i ]; if( s.id == id ) { printf( "%s", str ); printf( "%-5d %-6s %-8.2f %-8.2f %-8.2f %-8.2f %-8.2f %-8.2f %-8.2f %8.2f\n", s.id, s.name, s.baseSal, s.postSal, s.allowance, s.medical, s.accumulationFund, s.waterAndElec, s.totalSal, s.salary ); break; } }// 如果这里成立,就代表结构体数组遍历完都没有找到与输入的名字相符 if( i == M ) { printf( "没有此员工信息\n" ); }}void read( ){ FILE * fp; // < 文件指针,指向要读取的文件 > int i = 0; fp = fopen( "D:\JK0513.txt", "r" ); // 相对路径和绝对路径 if( fp == NULL ) { printf( "文件打开失败\n" ); exit( 1 ); } //从文件读入字符串,将标题存入字符数组 fgets( str, 180, fp ); //读取文本文件中的数据到结构体数组 while( !feof( fp ) ) { fscanf( fp, "%d %s %f %f %f %f %f %f\n", &s.id, s.name, &s.baseSal, &s.postSal, &s.allowance, &s.medical, &s.accumulationFund, &s.waterAndElec ); s.totalSal = s.baseSal + s.postSal + s.allowance; s.salary = s.totalSal - s.medical - s.accumulationFund - s.waterAndElec; emp[ i ] = s; i++; M++; } fclose( fp );}void display( ){ int i; printf( "%s", str ); // 将标题在控制台显示出来 for( i = 0; i < M; i++ ) { s = emp[ i ]; printf( "%-5d %-6s %-8.2f %-8.2f %-8.2f %-8.2f %-8.2f %-8.2f %-8.2f %8.2f\n", s.id, s.name, s.baseSal, s.postSal, s.allowance, s.medical, s.accumulationFund, s.waterAndElec, s.totalSal, s.salary ); }}void retrieve( ){ int i; while( 1 ) { printf( "***查询和显示\n" ); printf( " 1.姓名查询 \n" ); printf( " 2.工号查询 \n" ); printf( " 3.全部信息 \n" ); printf( " 0.返 回 ****\n" ); printf( "*请输入您的选择(0-3)\n" ); scanf( "%d", &i ); switch( i ) {case 1: query_name( ); break; case 2: query_id( ); break; case 3: display( ); break; case 0: return; default: printf( "您的输入有误,请重新输入!\n" ); } }}void create( ){ //添加数据 //提醒用户输入数据,用户输入数据(关键字),查询该关键字是否存在,不存在继续输入,存在提示不能继续输入 int id; char name[ 20 ]; float baseSal, postSal, allowance, medical, accumulationFund, waterAndElec; int i, k, d; if( M >= N ) { printf( "结构体数组已满,无法完成插入!\n" ); return; }printf( "请输入要添加的职工工号:\n" ); scanf( "%d", &id ); for( i = 0; i < M; i++ ) { s = emp[ i ]; if( s.id == id ) { printf( "要添加的员工已存在!\n" ); return; } } if( i == M ) { printf( "请依次输入员工的 [姓名] [基本工资] [职务工资] [津贴] [医疗保险] [公积金] [水电费] (以空格隔开):" ); scanf( "%s %f %f %f %f %f %f", name, &baseSal, &postSal, &allowance, &medical, &accumulationFund, &waterAndElec ); s.id = id; strcpy( s.name, name ); s.baseSal = baseSal; s.postSal = postSal; s.allowance = allowance; s.medical = medical; s.accumulationFund = accumulationFund; s.waterAndElec = waterAndElec; s.totalSal = s.baseSal + s.postSal + s.allowance; s.salary = s.totalSal - s.medical - s.accumulationFund - s.waterAndElec; emp[ i ] = s; M++; display( ); }}void sort_baseSal( ){ struct Emploee temp; int i, j; for( i = 0; i < M - 1; i++ ) for( j = 0; j < M - 1 - i; j++ ) if( emp[ j ].baseSal > emp[ j + 1 ].baseSal ) { temp = emp[ j ]; emp[ j ] = emp[ j + 1 ]; emp[ j + 1 ] = temp; } display( );}void sort_salary( ){ struct Emploee temp; int i, j; for( i = 0; i < M - 1; i++ ) for( j = 0; j < M - 1 - i; j++ ) if( emp[ j ].salary > emp[ j + 1 ].salary ) { temp = emp[ j ]; emp[ j ] = emp[ j + 1 ]; emp[ j + 1 ] = temp; } display( );}void sort( ){ int i; while( 1 ) { printf( "排序模块\n" ); printf( "1.按基本工资排序\n" ); printf( "2.按实发工资排序\n" );printf( "0.返 回\n" ); printf( "请输入您的选择\n" ); scanf( "%d", &i ); switch( i ) { case 1: sort_baseSal( ); break; case 2: sort_salary( ); break; case 0: return; default: printf( "您的输入有误,请重新输入!\n" ); } }}void update( ){ int i, id; char name[ 20 ]; float baseSal, postSal, allowance, medical, accumulationFund, waterAndElec; printf( "请输入想要修改员工的工号:" ); scanf( "%d", &id ); printf( "%d", id ); for( i = 0; i < M; i++ ) { if( emp[ i ].id == id ) { printf( "\n请输入想要该员工新的信息 [姓名] [基本工资] [职务工资] [津贴] [医疗保险] [公积金] [水电费] (以空格隔开):\n" );scanf( "%s %f %f %f %f %f %f", name, &baseSal, &postSal, &allowance, &medical, &accumulationFund, &waterAndElec ); printf( "修改之前的员工信息:\n" ); printf( "%s", str ); printf( "%-5d %-6s %-8.2f %-8.2f %-8.2f %-8.2f %-8.2f %-8.2f %-8.2f %8.2f\n", emp[ i ].id, emp[ i ].name, emp[ i ].baseSal, emp[ i ].postSal, emp[ i ].allowance, emp[ i ].medical, emp[ i ].accumulationFund, emp[ i ].waterAndElec, emp[ i ].totalSal, emp[ i ].salary ); strcpy( s.name, name ); s.baseSal = baseSal; s.baseSal = baseSal; s.postSal = postSal; s.allowance = allowance; s.medical = medical; s.accumulationFund = accumulationFund; s.waterAndElec = waterAndElec; s.totalSal = s.baseSal + s.postSal + s.allowance;s.salary = s.totalSal - s.medical - s.accumulationFund - s.waterAndElec; emp[ i ] = s; printf( "修改之后的员工信息:\n" ); printf( "%s", str ); printf( "%-5d %-6s %-8.2f %-8.2f %-8.2f %-8.2f %-8.2f %-8.2f %-8.2f %8.2f\n", s.id, s.name, s.baseSal, s.postSal, s.allowance, s.medical, s.accumulationFund, s.waterAndElec, s.totalSal, s.salary ); break; } } if( i == M ) { printf( "查无此人!\n" ); }}void del( ){ int id; printf( "请输入要删除的工号:" ); scanf( "%d", &id ); int i; for( i = 0; i < M; i++ ) { s = emp[ i ]; if( s.id == id ) { break; } } if( i == M ) { printf( "查无此人\n" ); return; } int k; / k =i i为删除的元素,将删除位置 后面的元素 依次往前移 第i+1 个往前移一个 将第i个位置的元素 覆盖掉,第i个位置的元素就被删除了 */ for( k = i; k < M - 1; k++ ) { emp[ k ] = emp[ k + 1 ]; } M--; display( );}void writeFile( ){ FILE * file = NULL; file = fopen( "D:\JK0513.txt", "w+" ); int i = 0; double sumBaseSal, sumPostSal, sumAllowance, sumMedical, sumAccumulationFund, sumWaterAndElec, sumTotalSal, sumSalary; fprintf( file, str ); for( i; i < M; i++ ) { s = emp[ i ]; fprintf( file, "%-5d %-6s %-8.2f %-8.2f %-8.2f %-8.2f %-8.2f %-8.2f %-8.2f %8.2f\n", s.id, s.name, s.baseSal, s.postSal, s.allowance, s.medical, s.accumulationFund, s.waterAndElec, s.totalSal, s.salary );sumBaseSal += s.baseSal; sumPostSal += s.postSal; sumAllowance += s.allowance; sumMedical += s.medical; sumAccumulationFund += s.accumulationFund; sumWaterAndElec += s.waterAndElec; sumTotalSal += s.totalSal; sumSalary += s.salary; } fprintf( file, "%-5d %-6s %-8.2f %-8.2f %-8.2f %-8.2f %-8.2f %-8.2f %-8.2f %8.2f\n", -1, "平均值", sumBaseSal / M, sumPostSal / M, sumAllowance / M, sumMedical / M, sumAccumulationFund / M, sumWaterAndElec / M, sumTotalSal / M, sumSalary / M ); fclose( file );printf( "写入文件成功(JK0513)!\n" );}void main( ){ int i; read( ); // 将文本文件中的数据存入结构体数组 display( ); // 将结构体中的数据显示到显示器 while( 1 ) { system("cls"); printf( "职工工资管理系统\n" ); printf( "****1.查询 *\n" ); printf( "****2.添加 *\n" ); printf( "****3.排序 *\n" ); printf( "****4.统计 *\n" ); printf( "****5.文件 *\n" ); printf( "****6.修改 *\n" ); printf( "****7.删除 *\n" ); printf( "****0.退出 *\n" ); printf( "**请输入你的选择(0-7):**\n" );scanf( "%d", &i ); switch( i ) { case 1: retrieve( ); // 查询数据 break; case 2: create( ); // 添加数据 break; case 3: sort( ); // 排序数据 break; case 4: display( ); // 统计数据 break; case 5: writeFile( ); break; case 6: update( ); break; case 7: del( ); break; case 0: exit( 0 ); default:printf( "您的输入有误 请重新输入\n:" ); } printf( "\n" ); }}

把代码格式化一下,点击插入代码段发布代码。

img

你的代码没有使用代码段,完全是纯内容的。别人看不了的哦。建议你先通过这种方式上传代码试试。
具体操作如下:
img