Мне нужно прочитать строку из stdin, а затем удалить все вхождения этой строки в файл. Я должен перезаписать исходный файл. Ниже я отправляю свой исходный код. Его проблемы в том, что я не знаю, какое условие остановки я должен добавить для цикла while
, а также, как я могу перезаписать исходный файл? (Как вы можете видеть, я попытался добавить все слова, которые не равны данной строке в отдельный файл).C: Удалить все вхождения слова в файл
#include <stdio.h>
#include <string.h>
int main()
{
FILE *fp, *fp_out;
char s[50], del[50];
fp = fopen("file_in", "r");
fp_out = fopen("file_out", "a");
fgets(del, 50, stdin);
fgets(s, 50, (FILE *)fp);
while(s != EOF) //I know that this does not work, what condition should I add?
{
fgets(s, 50, (FILE *)fp);
if(strcmp(s, del) != 0)
fprintf(fp_out, "%s ", s);
}
fclose(fp);
fclose(fp_out);
return 0;
}
Я уже говорил, что я также пытался добавить while(s != NULL)
, но это создает текстовый файл 592 МБ, содержащий все слова в моем текстовом файле ввода.
вы не перезаписываете исходный файл, потому что вы его убьете, пока вы одновременно пытаетесь его прочитать. вы создаете новый временный файл, выполняете копирование/фильтрацию в этот временный файл. Затем вы удалите оригинал и переименуйте temp. –
Что вы хотите для своего цикла: 'while (fgets (s, 50, fp))'. Чтобы понять, почему, посмотрите на [fgets return value] (http://www.cplusplus.com/reference/cstdio/fgets/). Также, прокатитесь на этом листе на 'fp'. Это уже ФАЙЛ *, поэтому нет причин бросать его. –
Вы отбрасываете первую строку входного файла, то есть вы не обрабатываете ее перед чтением второй строки. –