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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.05.2010, 13:47   #1
Eovin
Пользователь
 
Регистрация: 20.12.2009
Сообщений: 11
Вопрос Работа с текстовым файлом в Си

Задание такое: Текстовый файл содержит вещественные числа. Удалить их файла все числа, меньшие среднего значения всех чисел в файле.
Код:
#include <stdio.h>  //Библиотека функций ввода и вывода
int main(int argc, char *argv[])
{
     //Проверка: передан ли параметр командной строки
     if(argc < 2){  //Если нет, то вывод сообщения и выход
       puts("Имя файла не указано!");
       return 0;
     }
     FILE *f = NULL;  //Объявление файловой переменной
     //Открытие файла для чтения и записи с проверкой
     if((f = fopen("1.txt","r")) == NULL){
       //Если файл открыть не удалось, то
       puts("Невозможно открыть файл!");//вывод сообщения
       return 0;                        //и выход
     }
     double val;  //Буфер для чтения данных
     //Чтение первого значения из файла
     if(fread(&val,sizeof(double),1,f) != 1){
       //Если файл пустой, то вывод сообщения и выход
       puts("Пустой файл!");
       return 0;
     }
      FILE *f1 = tmpfile(void); // о_О ?!
      if(tmpfile == NULL){
       //Если файл пустой, то вывод сообщения и выход
       puts("Ошибка создания!");
       return 0;
     } 
  
     //Объявление и инициализация переменных для хранения
     double S = 0.0, h=0.0;
     int i; //i -- счетчик количества одинаковых элементов  
     while(!feof(f)){  //Пока не конец файла
       //Чтение значения из файла
       fread(&val,sizeof(double),1,f);
    
       //считаем сумму и увеличиваем счетчик
          S=S+val; 
          i++; }
     h=S/i;  // среднее значение
     FILE *fopen(f1,"r+");    //Открытие файла для записи
     if(!f1) return 1; //Если файл открыть не удалось, то выход
     while(!feof(f)){  //Пока не конец файла
       //Чтение значения из файла
       fread(&val,sizeof(double),1,f);
          // записываем только значения > h       
      if(val<h){fprintf(f,"%lf\n",val);} 
        i++; }    // после записи увеличение текущей позиции
      fclose(f);       
     FILE *fopen(f,"w");    //Открытие файла для записи
     if(!f) return 1; //Если файл открыть не удалось, то выход
     while(!feof(f1)){  //Пока не конец файла
       //Чтение значения из файла
       fread(&val,sizeof(double),1,f1);         
      fprintf(f,"%lf\n",val);} // перезаписываем начальный файл
       i++;  
     fclose(f);  //Закрытие файла
     return 0;
}
В общем, наваяла что-то, а оно не работает. Делала по примеру, так что не очень разобралась, ошибку найти не могу. Требуется помощь
З.Ы. Делаю в Pellec C
Какой мне странный сон приснился, - подумала Алиса и побежала домой, чтобы не опоздать к чаю.

Последний раз редактировалось Eovin; 19.05.2010 в 15:14.
Eovin вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с текстовым файлом rem2010 Помощь студентам 1 27.04.2010 06:54
Работа с текстовым файлом Smartbass Паскаль, Turbo Pascal, PascalABC.NET 3 22.05.2009 20:40
работа с текстовым файлом Cеверина Помощь студентам 4 30.03.2009 12:20
Работа с текстовым файлом GazimagomedovM Помощь студентам 12 17.07.2008 18:24
Работа с текстовым файлом nataly_ukr БД в Delphi 23 07.12.2007 22:13