如何根据c中的用户输入从文本文件中删除某些字符串



我必须为我的编程课编写一个c医院管理系统。病人名单和接收病人工作得很好,但我不能正确地让病人出院。我的程序要么无法根据病人的ID找到病人,要么一次让多名病人出院。当我尝试运行它时,没有任何警告或错误。我目前的方法是使用strcmp将患者的ID与用户输入的ID进行比较。

下面是我的代码:
#include <string.h>
#include <stdbool.h>
#include <stdlib.h>
#include <windows.h>
#define MAX 99

struct patient{
char raum[MAX];
char nummer[MAX];
char alter[MAX];
char name[MAX];
char geschlecht[MAX];
char krankheit[MAX];
}p;
int main(void){
FILE *akten;
int eingabe;
do{
printf("Krankenhausinformationssystem:n");
printf("1.Patientenliste.n");
printf("2.Patienten hinzufuegen.n");
printf("3.Raumzuteilung.n");
printf("4.Patienten entlassen.n");
printf("5.Beenden.n");
scanf("%i", &eingabe);

switch(eingabe){
case 1: printf("Patientenliste:n");
printf("%-10s %-20s %-20s %-20s %-20s %sn", "Nummer", " Raum", "Name", "Geschlecht", "Alter", "Krankheit");
printf("-------------------------------------------------------------------------------------------------------------------------------------------------------------------------n");
akten = fopen("akten.txt", "rb");

while(fread(&p, sizeof(p), 1, akten) == 1){
printf("%-10s %-20s %-20s %-20s %-20s %sn", p.raum, p.nummer, p.alter,p.name,p.geschlecht,p.krankheit);
}
fclose(akten);break;


case 2: printf("Patienten hinzufuegen:n");
akten = fopen("akten.txt","ab");
printf("Nummer:n");
fflush(stdin);
scanf("%s",p.nummer);
printf("Raum:n");
fflush(stdin);
gets(p.raum);
printf("Name:n");
fflush(stdin);
gets(p.name);
printf("Geschlecht:n");
fflush(stdin);
gets(p.geschlecht);
printf("Alter:n");
fflush(stdin);
gets(p.alter);
printf("Krankheit:n");
fflush(stdin);
gets(p.krankheit);
fwrite(p.nummer, sizeof(p.nummer), 1, akten);
fwrite(p.raum, sizeof(p.raum), 1, akten);
fwrite(p.name, sizeof(p.name), 1, akten);
fwrite(p.geschlecht, sizeof(p.geschlecht), 1, akten);
fwrite(p.alter, sizeof(p.alter), 1, akten);
fwrite(p.krankheit, sizeof(p.krankheit), 1, akten);
fclose(akten);break;



case 4: printf("Patienten entlassen:n");

char nummer[MAX];
int f=0;
printf("Patientennummer:n ");
fflush(stdin);
scanf("%s", nummer);
FILE *ft;
akten = fopen("akten.txt", "rb");
ft = fopen("temp.txt", "wb");
while(fread(&p, sizeof(p), 1, akten) == 1){
//strcpy(*nummer); strcpy(*p.nummer);
//int vergleich = strcmp(p.nummer,nummer);
if(nummer  == p.nummer){
f=1;
}else{
fwrite(&p, sizeof(p), 1, ft);
}
}

if(f==1){
printf("Patient wurde entlassen.n");
}else{
printf("Patient nicht gefunden !n");
}
fclose(akten);
fclose(ft);
remove("akten.txt");
rename("temp.txt", "akten.txt");
break;
case 5: exit(0);
default: printf("Ungueltige Eingabe");break;

}}
while(eingabe != 5); return 0;} ```

我测试了你的代码,从测试中,我有一些观察和建议。首先,由于您的患者编号条目实际上是一个字符串,因此我更改了"if";测试是否使用"约束"。函数,如注释所示。

/* if(nummer  == p.nummer){ */
if((strcmp(nummer, p.nummer) == 0)) {

我似乎仍然难以使该函数工作,直到我修改了新患者数据的输出,只将患者结构写入文件,而不是单独的元素。

fwrite(&p, sizeof(p), 1, akten);

同样,为了保持一致,我重构了所有的"get"。具有类似"扫描"功能的函数函数而不是混合物。下面就是这样一个条目:

scanf("%s", p.name);

这种一致性似乎允许放电功能起作用。那就试一试吧。如果您需要查看任何函数中的更多代码,请告诉我。

希望对你有帮助。

致意。

最新更新