2014-10-29 3 views
0

Я хочу добавить данные в файлы, если определенное условие истинно, иначе откройте новый файл и продолжайте писать в этот файл ... это продолжается в цикле.
Это то, что я делаю: не кажется, работает правильноДобавление операции в файл, похоже, не работает

FILE* ptr 
firstrun=1 
***some code*** 
WHILE (condition) 
{ 
    if(!condition1 && !condition 2) 
     something 
    else if(condition1 || condition 2) 
    { 
     write data to file 
     if(firstrun) 
      FILE* ptr 
      fopen a file 
      firstrun=0 

     ***some code*** 
     if condition1 
      append data to previously opened file 
     if condition2 
      fclose 
      FILE* ptr 
      fopen another new file 
    } 
} 

код в целом, но и другие части, кажется правильным. Созданный первый файл соответствует ответу, но ни один из следующих файлов не делает. Я также создаю гораздо больше файлов, не подозревая, сколько данных повторяется.
Может ли кто-нибудь сказать мне, правильно ли я здесь сделал? Я не отправляю код, потому что он огромен.

Некоторые другие случаи:
1. Если я не объявляю FILE * PTR в верхней части, он не компилируется, так как только другая декларация внутри «если» условие
2. Другой путь использовать более «если», что сделало бы код messier, и я не уверен, что это сработает.

Любая помощь оценена! Благодаря!

+1

Этот псевдокод вообще не помогает. Не могли бы вы попытаться разбить свой код на небольшой пример, показывающий поведение, которое вы наблюдаете? Чтобы мы могли помочь вам определить реальные ошибки, которые у вас есть, а не * угадывающие ошибки, которые вы * могли бы иметь? –

+0

Хорошо ... Я в один миг. – fineashell

+0

Ух..но я не могу. Это задание колледжа (не хочу, чтобы вас поймали на помощь), плюс код очень запутанный, взаимосвязанный и большой. Это в основном заменяющий алгоритм слияния, с записью первичной кучи в выходной буфер. Я хочу создать runfiles из большего файла input.bin. Условие 1: outputbuffer <1000 и условие 2: heapsize> 0. Если они ложны, я должен добавить данные в ранее открытый файл. Я проверил, мой гепсорт отлично работает. У меня нет большой уверенности в том, как работает указатель FILE. – fineashell

ответ

0

Я не на работе и ничего не могу скомпилировать прямо сейчас, но попробовать что-то вдоль линий

FILE* ptr = NULL 
firstrun = true; 
while (condition) 
{ 
    if((false == condition1) && (false == condition 2)) 
    { 
     ... 
    } 
    else /* Your second condition logic is not needed as written */ 
    { 
     if(true == firstrun) 
     { 
      ptr = fopen("/some/file/name", "w"); 
      firstrun = false; 
     } 

     if (true == condition1) 
     { 
      fwrite(ptr, ..., ..., ...); 
     } 
     else 
     { 
      fclose(ptr); 
      ptr = fopen("/some/other/file/name", "w"); 
     }    
    } 
} 

Обратите внимание, что ваш вопрос сказал, что если условие истинно, добавьте в файл, ELSE откройте другой файл. Ваш псевдокод проверяет условие для записи, затем другое условие для открытия нового файла. Это не дает вам if/else, который вы ищете; Вы можете нажать любую из четырех возможностей с исходным кодом псевдо:

  1. Ни запись в открытый файл и не открывать новый один
  2. Запись на открытый файл только
  3. Открыть новый файл только
  4. Напишите открытому файлу и откройте новый файл
+0

Обнаружена ошибка в другом разделе. За исключением переписывания в псевдокоде, все остальное работает нормально. – fineashell

+1

Это приятно слышать. Имейте в виду, что логика в коде psuedo по-прежнему неверна, если вы хотите иметь чистые отношения if/else относительно записи или открытия файла. Если он работает как if/else, это потому, что условия, которые вы контролируете, просто делают это для вашего тестирования –