Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.08.2011, 11:32   #1
Анннютик
Пользователь
 
Регистрация: 02.08.2011
Сообщений: 18
По умолчанию РАБОТА С ФАЙЛАМИ, Си

Помогите! Нужно разработать программу удаления в тексте, содержащемся в файле, лишних пробелов.
Тут программа, которая удаляет все пробелы. Где и что нужно изменить???


Код:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main()
{
 char c;
 FILE *fd;
 FILE *fda;

 fd=fopen("F:\\7.txt","rt");
 fda=fopen("F:\\8.txt","wt");

 c=getc(fd);
 while(c!=EOF)
 {
 if(c!=32)
 {

 putc(c,fda);
 printf("%c",c);
 }
 c=getc(fd);

 }

 fclose(fd);
 fclose(fda);

 system("erase F:\\7.txt");
 system("rename F:\\8.txt F:\\7.txt");

}

Последний раз редактировалось Анннютик; 09.08.2011 в 11:57.
Анннютик вне форума Ответить с цитированием
Старый 09.08.2011, 11:46   #2
MooNDeaR
В стагнации
Участник клуба
 
Аватар для MooNDeaR
 
Регистрация: 29.07.2011
Сообщений: 1,303
По умолчанию

А что подрузамевается под "лишними" пробелами?

P.S. И форматируйте код пжлста
E-mail: pashaworking@gmail.com | ICQ: 479914426 | Skype: moondearr
Понять, чего от тебя требует заказчик – это уже половина всей работы, а иногда и полностью выполненное задание.
MooNDeaR вне форума Ответить с цитированием
Старый 09.08.2011, 11:57   #3
Syuf
Форумчанин
 
Аватар для Syuf
 
Регистрация: 02.02.2010
Сообщений: 599
По умолчанию

Код:
#include <stdio.h>
#include <stdlib.h>


int main()
{
    FILE *fin = fopen("F:\\7.txt", "r");
    FILE *fout = fopen("F:\\8.txt", "w");

    if(!fin || !fout)
    {
        printf("Can't open the file %s.\n", (fin ? "F:\\8.txt" : "F:\\7.txt"));
        exit(1);
    }

    for(char ch = fgetc(fin); !feof(fin); ch = fgetc(fin))
    {
        if(ch == ' ')
        {
            fputc(ch, fout);
            while(!feof(fin) && (ch = fgetc(fin)) == ' ');
            if(feof(fin))
                break;
        }
        fputc(ch, fout);
    }

    if(fclose(fin) == EOF || fclose(fout) == EOF)
    {
        puts("Error while closing the files.");
        exit(1);
    }
    
    system("erase F:\\7.txt");
    system("rename F:\\8.txt F:\\7.txt");

    return 0;
}
"Лишь то читается легко, что написано с трудом; что в час написано, то в час и позабыто."
Syuf вне форума Ответить с цитированием
Старый 09.08.2011, 11:59   #4
Анннютик
Пользователь
 
Регистрация: 02.08.2011
Сообщений: 18
По умолчанию

"Лишние" пробелы - это значит что в файле изначатьно содержится не по одному, а по несколько прбелов.Вот их и надо удалить, оставив по одному пробелу
Анннютик вне форума Ответить с цитированием
Старый 09.08.2011, 12:03   #5
MooNDeaR
В стагнации
Участник клуба
 
Аватар для MooNDeaR
 
Регистрация: 29.07.2011
Сообщений: 1,303
По умолчанию

Цитата:
Сообщение от Анннютик Посмотреть сообщение
"Лишние" пробелы - это значит что в файле изначатьно содержится не по одному, а по несколько прбелов.Вот их и надо удалить, оставив по одному пробелу
Тогда мне уже нечего сказать. Пост выше вашего уже всё написал. Я бы просмотр файла сделал бы через while цикл, но по большому счету это две разные стороны одного и того же
E-mail: pashaworking@gmail.com | ICQ: 479914426 | Skype: moondearr
Понять, чего от тебя требует заказчик – это уже половина всей работы, а иногда и полностью выполненное задание.
MooNDeaR вне форума Ответить с цитированием
Старый 09.08.2011, 12:09   #6
Анннютик
Пользователь
 
Регистрация: 02.08.2011
Сообщений: 18
По умолчанию

Код:
for(char ch = fgetc(fin); !feof(fin); ch = fgetc(fin))
Тут ошибку пишет:

error: 'for' loop initial declarations are only allowed in C99 mode|
use option -std=c99 or -std=gnu99 to compile your code|
Анннютик вне форума Ответить с цитированием
Старый 09.08.2011, 12:10   #7
MooNDeaR
В стагнации
Участник клуба
 
Аватар для MooNDeaR
 
Регистрация: 29.07.2011
Сообщений: 1,303
По умолчанию

Попробуйте написать вместо этого:

Код:
while(ch = fgetc(fin), !feof(fin))
{
/* всё то же самое */
}
E-mail: pashaworking@gmail.com | ICQ: 479914426 | Skype: moondearr
Понять, чего от тебя требует заказчик – это уже половина всей работы, а иногда и полностью выполненное задание.
MooNDeaR вне форума Ответить с цитированием
Старый 09.08.2011, 13:46   #8
Syuf
Форумчанин
 
Аватар для Syuf
 
Регистрация: 02.02.2010
Сообщений: 599
По умолчанию

C C C...
Код:
#include <stdio.h>
#include <stdlib.h>


int main()
{
    FILE *fin = fopen("F:\\7.txt", "r");
    FILE *fout = fopen("F:\\8.txt", "w");

    if(!fin || !fout)
    {
        printf("Can't open the file %s.\n", (fin ? "F:\\8.txt" : "F:\\7.txt"));
        exit(1);
    }

    char ch;
    for(ch = fgetc(fin); !feof(fin); ch = fgetc(fin))
    {
        if(ch == ' ')
        {
            fputc(ch, fout);
            while(!feof(fin) && (ch = fgetc(fin)) == ' ');
            if(feof(fin))
                break;
        }
        fputc(ch, fout);
    }

    if(fclose(fin) == EOF || fclose(fout) == EOF)
    {
        puts("Error while closing the files.");
        exit(1);
    }
    
    system("erase F:\\7.txt");
    system("rename F:\\8.txt F:\\7.txt");

    return 0;
}
"Лишь то читается легко, что написано с трудом; что в час написано, то в час и позабыто."
Syuf вне форума Ответить с цитированием
Старый 09.08.2011, 14:23   #9
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,323
По умолчанию

Я бы ещё после:
Код:
printf("Can't open the file %s.\n", (fin ? "F:\\8.txt" : "F:\\7.txt"));
и
Код:
puts("Error while closing the files.");
написал бы:
Код:
system("pause");
А лучше, по возможности, не использовать system("s")

Цитата из К&R:
Цитата:
Допустимое содержимое строки s сильно зависит от конкретной операционной среды
К примеру, в Linux'е я не могу откомпилировать файл с программой без необходимых изменений.

P.S. Хотя последнее своё утверждение я ещё не проверял, так как на работе XP.

Последний раз редактировалось 8Observer8; 09.08.2011 в 14:26.
8Observer8 вне форума Ответить с цитированием
Старый 09.08.2011, 14:30   #10
Syuf
Форумчанин
 
Аватар для Syuf
 
Регистрация: 02.02.2010
Сообщений: 599
По умолчанию

Цитата:
написал бы:
Код:
system("pause");
А лучше, по возможности, не использовать system("s")
Логика..


Код:
system("erase F:\\7.txt");
Можно заменить на:
Код:
remove("F:\\7.txt");
Код:
system("rename F:\\8.txt F:\\7.txt");
Можно заменить на:
Код:
rename("F:\\8.txt", "F:\\7.txt");
"Лишь то читается легко, что написано с трудом; что в час написано, то в час и позабыто."
Syuf вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
работа с файлами nikcpp Общие вопросы Delphi 2 11.05.2011 15:04
Работа с файлами Gen_r_questions PHP 5 29.04.2011 09:01
работа с файлами basav1k Помощь студентам 2 19.05.2010 19:17
Работа с файлами на С++ nec117 Общие вопросы C/C++ 4 24.02.2009 23:18
Работа с файлами Cpluser Общие вопросы C/C++ 2 16.02.2009 23:22