如何正确地做一个删除和修改功能



这段代码有几个问题超出了我的理解。

首先,无论我多么努力,变量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没有在启用所有警告的情况下编译。节省时间-启用所有警告。

empnot defined

也许OP不是使用C编译器,而是c++编译器?

i未在for (i = 0; i < n; i++) {中定义

int I;是真正的代码吗?

Bad"%s"

如果没有宽度"%s"gets()差。使用宽度,如"%49s"

相关内容

  • 没有找到相关文章

最新更新