这段代码有几个问题超出了我的理解。
首先,无论我多么努力,变量ok
都不会保存在文件中,从而破坏了显示。这很奇怪,因为其他变量都可以工作,只有一个变量似乎不能工作,即使我改变顺序。
同时,删除和修改函数也不能工作。
我什么都试过了,但似乎都不管用。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h>
// Structure of the employee
struct emp {
char name[50];
char ok[50];
int hr;
int age;
int id;
};
FILE *f;
emp* add(emp *e,int n){
int i;
char p;
emp *t;
int k;
t=(emp*)malloc(n*sizeof(int));
f=fopen("Data.txt","w");
for(i=0;i<n;i++){
printf("nEnter Name : ");
scanf("%s",(t+i)->name);
printf("nEnter Departement: ");
scanf("%s",&(t+i)->ok);
printf("nEnter Age : ");
scanf("%d",&(t+i)->age);
printf("nEnter avearge hour of works(per week) : ");
scanf("%d",&(t+i)->hr);
// k = ( ( (t+i)->hr ) *40 );//40 is minimum wage for each hour of work
// printf("Salary of The employe: %dn",k);
printf("nEnter EMP-ID : ");
scanf("%d",&(t+i)->id);
fprintf(f,"%sn%sn%dn%dn%dn",(t+i)->name,(t+i)->ok,(t+i)->age,(t+i)->hr,(t+i)->id);
}
fclose(f);
return t;
}
void aff(emp *t,int n){
int I;
f=fopen("Data.txt","r");
for(i=0;i<n;i++){
if (f != NULL){
fscanf(f,"%s",&(t+i)->name);
fscanf(f,"%s",&(t+i)->ok);
fscanf(f,"%d",&(t+i)->age);
fscanf(f,"%d",&(t+i)->hr);
fscanf(f,"%d",&(t+i)->id);
printf("Name : %sn",(t+i)->name);
printf("departement : %sn",(t+i)->ok);
printf("Age : %dn",(t+i)->age);
printf("Hours : %dn",(t+i)->hr);
printf("ID : %dn",(t+i)->id);
}
}
fclose(f);
}
//emp* modf(emp *t,int n){
// int i;
// int k;
// char nv[50];
// printf("id of the entry you want to be modified" );
// scanf("%dn",&k);
// for(i=0;i<n;i++){
// if(k==(t+i)->id){
// scanf("%s",&nv);
// (t+i)->name=nv;
// }
// }
// return t;
//}
//void del(emp *t,int n){
// int i;
// emp a;
// int k;
// printf("position of the entry you want to delete?");
// scanf("%d",&a);
// for(i=0;i<n;i++){
// if (a == *(t+i)) {
// for(i=k;i<n-1;i++){
// *(t+i)=*(t+i+1);
// }
// }
// }
//}
int main(int argc, char *argv[]){
int c;
emp e;
emp *k;
k=&e;
int n;
emp *t;
t=&e;
char p;
ka:
printf("Welcome To The employe management Menun");
printf("1.Add employes?n");
printf("2.show all employes?n");
printf("3.delete an entry?n");
scanf("%d",&c);
switch (c){
case 1:
ed:
printf("How many employes you want to add?n");
scanf("%d",&n);
add(k,n);
if(p=='y'){
goto ed;
}
else goto ka;
break;
case 2:
aff(t,n);
break;
case 3:
del(t,n);
break;
}
return 0;
}
至少这些问题:
分配大小错误@Weather叶片
避免分配错误。分配的参考对象的大小,而不是类型。
// t=(emp*)malloc(n*sizeof(int));
t = malloc(sizeof t[0] * n);
更容易正确编码,检查和维护。
未初始化的p
@Craig Estey
f(p=='y')
为未定义行为,因为p
未初始化。
这暗示OP没有在启用所有警告的情况下编译。节省时间-启用所有警告。
emp
not defined
也许OP不是使用C编译器,而是c++编译器?
i
未在for (i = 0; i < n; i++) {
中定义
int I;
是真正的代码吗?
Bad"%s"
如果没有宽度,"%s"
比gets()
差。使用宽度,如"%49s"
。