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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.01.2009, 21:50   #1
bigturtle
 
Регистрация: 27.01.2009
Сообщений: 3
По умолчанию Открытие файла на чтение функция fopen

Здравствуйте, задача нужно создать файл и записать в него поочередно кусок из одного файла(ну допустим слово) кусок из другого файла, потом опять кусок из первого файла кусок из второго и сново тоже самое. Получается, что это часть подпрограммы то есть организуется с помошью отдельных функций. Одна функция отвечает за открытие одного файла, другая за открытие другого. Вопрос как нужно реализовать, что бы при первом вызове функции, программа понимала, что файл нужно открыть, а при втором продолжала чтение из это го же файла. После чего если файл прочтется до конца, но функция закончится, то при повторном открытии, функция поняла, что файл хоть и открыт, но закончен по этому нужно повторно открыть.
Вот примерный кусок коды.
Код:
void ad(void){    
    FILE *a_txt;
// Вот тут надо, что то вставить что бы процес не повторялся каждый раз....
        if ((a_txt=fopen("1.txt","r"))== NULL) {
           printf("Error File 1.txt\n");
           system("pause");
           exit(1);
             }
    
while(1){
            dir1=fgetc(a_txt);
     
            if (!feof(a_txt)){
            if(dir1==';'){break;}                
        
        fputc(dir1,g);// записываем в файл g он оглашен ранее
            }
            else { fclose(a_txt);    
                if ((a_txt=fopen("1.txt","r"))== NULL) {
                                    printf("Error File 1.txt\n");
                                    system("pause");
                                    exit(1);
                                      }}
Получается, что при вызове функция будет считывать одно и тоже слово. а нужно, что бы продолжало читать дальше. Спасибо.
bigturtle вне форума Ответить с цитированием
Старый 28.01.2009, 01:23   #2
counter
Участник клуба
 
Регистрация: 18.10.2008
Сообщений: 1,409
По умолчанию

можно какой нибудь флажок передавать и проверять его значение

что то вроде этого

Код:
void main ()

{
   .......
   int flag=0;

   flag=ad(flag);
  
  ....
}

int ad (int flag)

{
   if (!flag)
    { // открываем файл
       flag=1;
     }
   else
  { 
     // все остальное
   }

return flag;
}
counter вне форума Ответить с цитированием
Старый 28.01.2009, 11:15   #3
bigturtle
 
Регистрация: 27.01.2009
Сообщений: 3
По умолчанию

а есть еще варианты? я вот побывал вставить
Код:
void ad(void){    
    FILE *a_txt;
/*например вот*/  if (a_txt!=fopen("1.txt","r")){// но при большом количеств вылетает.
        if ((a_txt=fopen("1.txt","r"))== NULL) {
           printf("Error File 1.txt\n");
           system("pause");
           exit(1);
             }}
    
while(1){
            dir1=fgetc(a_txt);
     
            if (!feof(a_txt)){
            if(dir1==';'){break;}                
        
        fputc(dir1,g);// записываем в файл g он оглашен ранее
            }
            else { fclose(a_txt);    
                if ((a_txt=fopen("1.txt","r"))== NULL) {
                                    printf("Error File 1.txt\n");
                                    system("pause");
                                    exit(1);
                                      }}
bigturtle вне форума Ответить с цитированием
Старый 28.01.2009, 11:50   #4
MaTBeu
Eclipse Foundation
Старожил
 
Аватар для MaTBeu
 
Регистрация: 19.09.2007
Сообщений: 2,604
По умолчанию

Проверка ваша ничего не делает. Так как вы переменную a_txt каждый раз инициализируете. Попробуйте написать
Код:
static FILE *a_txt;
так ваша переменная будет сохранять свое предыдущее состояние при каждом вызове функции.
MaTBeu вне форума Ответить с цитированием
Старый 28.01.2009, 16:08   #5
breate
Пользователь
 
Аватар для breate
 
Регистрация: 30.12.2008
Сообщений: 78
По умолчанию

я тебе могу предложить другой вариант решения проблемы
выглядит премерно так:
Код:
#include <fstream>
void main ()
{

...
ifstream fin("1.txt",ios::in);
ifsrteam finn("2.txt",ios::in);
ofstream fout("3.txt",ios::out||ios::trunc);
while(!fin.bad())
{
char t[...];
fin>>t;
fout<<t<<endl;
finn>>t;
fout<<t<<endl;
}
}
Модератор: тег CODE
Моя работа - Создание сайтов

Последний раз редактировалось MaTBeu; 28.01.2009 в 16:31.
breate вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Открытие файла Messir_Leonard Win Api 2 09.04.2008 19:33
Открытие файла Veiron Общие вопросы Delphi 2 27.02.2008 03:12
Открытие файла KillbrumX Помощь студентам 5 02.02.2008 20:50
Открытие файла Lexakazanskij Паскаль, Turbo Pascal, PascalABC.NET 9 01.11.2007 22:27