Удалить из текстового файла все лишние пробелы, оставив между словами не более одного пробела - 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);
}

Объяснение кода листинга программы

  1. Объявлены две переменные типа char: c и fl1.
  2. Инициализируется цикл while, который будет выполняться до тех пор, пока не достигнется конец файла fl1.
  3. Внутри цикла считывается текущий символ из файла fl1 и записывается в переменную c.
  4. Затем этот символ записывается в файл fl2.
  5. Далее, в цикле while считываются символы из файла fl1 до тех пор, пока не будет встречен символ, отличный от пробела.
  6. После нахождения такого символа, он записывается в файл fl2.
  7. В конце цикла while не будет выполнено условие завершения, поэтому он будет выполняться до тех пор, пока не достигнется конец файла fl1.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 3.727 из 5
Похожие ответы