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