Язык C ~ файл данных с помощью функции удаления изменить содержимое текстового файла (File IO) - PullRequest
0 голосов
/ 22 ноября 2018

Я новичок и все еще изучаю язык Си.В настоящее время у меня проблема с моим кодом.Задача удалить что-то в файле IO, по умолчанию в моем текстовом файле есть какая-то записьЗадача - попросить пользователя ввести строки, которые он / она хотел бы удалить в текстовом файле.Однако возникает проблема:

1) программа c все еще работает в первый раз, но второй, третий раз и ниже не могут работать (это означает, что можно просто удалить строки в первый раз)

Я думаю, что это проблема с буфером, поэтому я добавляю много кодов fflush, но все еще не могу решить.

2) Я хотел бы изменить свою программу на использование ключевого слова для поиска записи и удаления.Тип записи можно удалить всю запись элемента.Однако я понятия не имею, как это работает.

Если кто-то может мне помочь, я очень благодарен и счастлив.1) код ниже:

#include<stdio.h> #include<stdlib.h>      
int main(){
FILE *fileptr1, *fileptr2, *fileptr3;
char filename[40]="itemrecord.txt";
char save;
int delete_line, temp = 1;
char reply;

printf("Enter file name: ");
scanf("%s", filename);

do{


//open file in read mode
fileptr1 = fopen(filename, "r");
if (fileptr1== NULL){
printf("open unsuccessful,file not exist"); 
exit(1);
}
save = getc(fileptr1);
while (save != EOF)
{
    printf("%c", save);
    save = getc(fileptr1);
}

//rewind
rewind(fileptr1);

fflush(stdout);
printf(" \n\n Enter line number of the line to be deleted <type 0 = not 
delete anything>:");
fflush(stdin);
scanf("%d", &delete_line);


//open new file in write mode
fileptr2 = fopen("copy.c", "w");
save = 'a';
while (save != EOF)
{
    save = getc(fileptr1);
    //except the line to be deleted
    if (temp != delete_line)
    {
        //copy all lines in file replica.c
        putc(save, fileptr2);
    }
    if (save == '\n')
    {
        temp++;
    }
   }

fclose(fileptr1);
fclose(fileptr2);
remove(filename);
//rename the file replica.c to original name
rename("copy.c", filename);
fflush(stdout);
printf("\nThe contents of file after being changed are as follows:\n");

fileptr1 = fopen(filename, "r");
save = getc(fileptr1);
while (save != EOF)
{
    printf("%c", save);
    save = getc(fileptr1);
}
fflush(stdout);
fflush(stdin);
fclose(fileptr1); 

 printf("\n\n Delete anther item?<y/n>: ");
 scanf("%c",&reply);  

 }while(reply=='y' || reply=='Y');
  return 0;
  }

Результат:

Enter file name:itemrecord
mary 1 123
sam  2 124
bob  3 125

Enter line number of the line to be deleted<type 0=not delete anything>:1

The contents of file after being changed are as follows:
sam  2 124
bob  3 125

Delete other record?<y/n>:y
sam  2 124
bob  3 125

Enter line number of the line to be deleted<type 0=not delete anything>:1

The contents of file after being changed are as follows:
sam  2 124
bob  3 125   

Delete other record?<y/n>:n

//second time doesn't work.//

Извините за длинный код и длинный вопрос, но я так запутываю...

2) если моя запись в

Mary
1
123

sam  
2 
124

bob  
3 
125

ТАК, как я могу набрать 'Mary', удалить весь элемент записи?что-то в этом роде ...

sam  
2 
124

bob  
3 
125

1 Ответ

0 голосов
/ 22 ноября 2018

Попробуйте это

int delete_line, temp;
char reply;

printf("Enter file name: ");
scanf("%s", filename);

do{
    temp = 1;
    ....

Надеюсь, это поможет.

...