Удалить из текстового файла все лишние пробелы, оставив между словами не более одного пробела - C (СИ)
Формулировка задачи:
Дано вот такое задание: Дан текстовый файл. Удалить из него все лишние пробелы, оставив между словами не более одного пробела. Результат поместить в новый файл. Вроде бы задание сделано верно но что то идет не так а разобраться где именно ошибка не могу .
int main() { FILE* fl1; FILE* fl2; char c1, c; int a,i; long size; char *buffer=NULL, *buffer2=NULL; setlocale (LC_ALL, "RUS"); fopen_s(&fl1,"input.txt","r"); fopen_s(&fl2,"output.txt","w"); if (fl1 == NULL) { fopen_s(&fl1,"input.txt", "w"); printf("Файл не существовал.\nНажмите Enter для закрытия программы.\Введите текст в файл и запустите программу заново.\n"); system("pause"); exit (1); } size = _filelength( _fileno(fl1) ); if(size==NULL) { puts("Файл пустой! Проверьте содержание файла.\n"); system("pause"); exit (1); } buffer=(char*)malloc(1024*sizeof(char)); buffer2=(char*)malloc(1024*sizeof(char)); if((!buffer) || (!buffer2)) { puts("Ошибка, память для буфера не выделена, нажмите Enter."); _getch(); exit(1); } while(!feof(fl1)) { a=fread(buffer, sizeof(char), 1024, fl1); for(i=0;i<a;i++){ c=*(buffer+i); c1=*(buffer+i+1); if (c == ' ') { if (c1==' ') i++; } *(buffer2+i)=c; fwrite(buffer2,sizeof(char),1024,fl2); if (a<1024) break ; } if(ferror(fl2)) perror ("Ошибка при выводе символа."); fclose(fl1); if(ferror(fl1)) perror ("Ошибка при закрытии файла."); fclose(fl2); printf("Результат выведен так же в файл для вывода.\n"); system("pause"); exit (0); }}
Решение задачи: «Удалить из текстового файла все лишние пробелы, оставив между словами не более одного пробела»
textual
Листинг программы
char c; while(!feof(fl1)){ c=fgetc(fl1); fputc(fl2,c); for(;c==' ';c=fgetc(fl1)); fputc(fl2,c); }
Объяснение кода листинга программы
- Объявлены две переменные типа char:
c
иfl1
. - Инициализируется цикл while, который будет выполняться до тех пор, пока не достигнется конец файла
fl1
. - Внутри цикла считывается текущий символ из файла
fl1
и записывается в переменнуюc
. - Затем этот символ записывается в файл
fl2
. - Далее, в цикле while считываются символы из файла
fl1
до тех пор, пока не будет встречен символ, отличный от пробела. - После нахождения такого символа, он записывается в файл
fl2
. - В конце цикла while не будет выполнено условие завершения, поэтому он будет выполняться до тех пор, пока не достигнется конец файла
fl1
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д