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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.11.2009, 23:41   #1
Корделия
Пользователь
 
Регистрация: 28.04.2009
Сообщений: 21
По умолчанию Работа с файлами

Даны имена двух файлов вещественных чисел. Известно, что один из них (не обязательно первый) существует и является непустым, а другой в текущем каталоге отсутствует. Создать отсутствующий файл и записать в него конечный и начальный элементы существующего файла (в указанном порядке).
Корделия вне форума Ответить с цитированием
Старый 19.11.2009, 12:30   #2
ds.Dante
Старожил
 
Аватар для ds.Dante
 
Регистрация: 06.08.2009
Сообщений: 2,992
По умолчанию

С нуля ничего делать не будем. Алгоритм - тривиальный, так что извольте свои наработки, либо во фриланс.
ds.Dante вне форума Ответить с цитированием
Старый 20.11.2009, 21:36   #3
Корделия
Пользователь
 
Регистрация: 28.04.2009
Сообщений: 21
По умолчанию

я плохо знаю си..я могу проверить существует файл или нет...открыть его..и подсчитать кол-во чисел в нем...но я не могу найти функцию с помощью которой считать именно конечное и первое число и функцию чтобы записать эти числа в другой файл(((((Пожалуйста подскажите что это за функции...(((
Корделия вне форума Ответить с цитированием
Старый 20.11.2009, 21:40   #4
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

fopen - открыли файл
fread - прочитали первое число
fseek - перешли от конца файла на sizeof(float) или sizeof(double) байт, смотря что используется
fread - прочитали последнее число
fclose - закрыли файл
pu4koff вне форума Ответить с цитированием
Старый 26.11.2009, 20:49   #5
Корделия
Пользователь
 
Регистрация: 28.04.2009
Сообщений: 21
По умолчанию Проверьте пожалуйста...я не пойму где ошибка(((

Код:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
int main ()
{
clscr();

char fileName[256];
char fileName2[256];
FILE *f;
FILE *g;
double a;
double b;


printf("vvedite 1");
scanf("%s",fileName);
printf("vvedite 2");
scanf("%s",fileName2);


f=fopen(fileName,"rb+");
if(f==0)
{
fclose(f);
g=fopen(fileName2,"rb+");
 if(g==0)
 {perror("ne mogu otkrit faili");
 exit(1);}
 else {
 fread(a,sizeof(double),1,g);
 fseek(g,0L,SEEK_END);
 fread(b,sizeof(double),1,g);
 fclose(g);
 f=fopen(fileName,"aw");
 fwrite(b,sizeof(double),1,f);
 fwrite(a,sizeof(double),1,f);
 fclose(f);
 }
else {
fread(a,sizeof(double),1,f);
fseek(f,0L,SEEK_END);
fread(b,sizeof(double),1,f)
fclose(f);
f=fopen(fileName2,"aw");
fwrite(b,sizeof(double),1,g);
fwrite(a,sizeof(double),1,g);
fclose(g);
}



getch ();
return 0;
}

Последний раз редактировалось Sazary; 27.11.2009 в 20:43.
Корделия вне форума Ответить с цитированием
Старый 26.11.2009, 23:19   #6
forsaken66
Куды бечь?
Форумчанин
 
Аватар для forsaken66
 
Регистрация: 05.10.2009
Сообщений: 104
По умолчанию

Код:
fread(&a,sizeof(double),1,g);
нужно передавать адрес переменной, но не саму переменную. по моему так
Не хватало всего одного байта. Да-да, того самого, что из восьми бит состоит.
forsaken66 вне форума Ответить с цитированием
Старый 26.11.2009, 23:59   #7
Корделия
Пользователь
 
Регистрация: 28.04.2009
Сообщений: 21
Печаль

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

Код второй версии:

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

int main ()
{
clrscr();
char file1[256];
char file2[256];
FILE *f;
FILE *g;
size_t kol;
float buff[512];
int a;


printf("vvedite fail1:\n");
scanf("%s",file1);
printf("vvedite fail2:\n");
scanf("%s",file2);

a=sizeof(float);

f=fopen(file1,"rb");
if (f==0)
 {
	 fclose(f);
	 g=fopen(file2,"rb");
	 if (g==0)
			{
			 fclose(g);
			 printf("ne vipolnyetca uslovij");
			}
	 else
			{
				kol=fread(buff,a,512,g);
				f=fopen(file1,"ab");
				fwrite(&buff[1],a,1,f);
				fwrite(&buff[kol],a,1,f);
				fclose(g);
				fclose(f);
			 }
 }
 else
	 {
		 kol=fread(buff,a,512,f);
		 f=fopen(file2,"wb");
		 fwrite(&buff[1],a,1,g);
		 fwrite(&buff[kol],a,1,g);
		 fclose(f);
		 fclose(g);
		}



getch ();
return 0;
}

Последний раз редактировалось Sazary; 27.11.2009 в 20:43.
Корделия вне форума Ответить с цитированием
Старый 27.11.2009, 00:16   #8
forsaken66
Куды бечь?
Форумчанин
 
Аватар для forsaken66
 
Регистрация: 05.10.2009
Сообщений: 104
По умолчанию

Попробуйте вот это. Правда не тестировал, не уверен что правильно работает

Код:
#include "stdafx.h"
#include "iostream"
#include "stdio.h"
#include "stdlib.h"
#include "conio.h"
using namespace std;
int main ()
{
char fileName[256];
char fileName2[256];
FILE *f;
FILE *g;
double a;
double b;
bool le=false;

printf("vvedite 1");
scanf("%s",fileName);
printf("vvedite 2");
scanf("%s",fileName2);

f=fopen(fileName,"rb+");
 if(f==0)
 {
	 fclose(f);
	 perror("ne mogu otkrit fail 1");

 }
 else // file is success open 
 {
	 fread(&a,sizeof(double),1,f);
	 fseek(f,0L,SEEK_END);
	 fread(&b,sizeof(double),1,f);
	 fclose(f);
	 g=fopen(fileName2,"ab");
	 fwrite(&b,sizeof(double),1,g);
	 fwrite(&a,sizeof(double),1,g);
	 fclose(g);
	 le=true;
 }

if (!le)
{
 g=fopen(fileName2,"rb+");
 if(g==0)
	 {
		 perror("ne mogu otkrit fail 2");
		 exit(1);
	 }
 else // file is success open 
 {
	  fread(&a,sizeof(double),1,g);
	  fseek(g,0L,SEEK_END);
	  fread(&b,sizeof(double),1,g);
	  fclose(g);
	  f=fopen(fileName,"ab");
	  fwrite(&b,sizeof(double),1,f);
	  fwrite(&a,sizeof(double),1,f);
	  fclose(f);
 }
}
 _getch();
 return 0;
}
Не хватало всего одного байта. Да-да, того самого, что из восьми бит состоит.
forsaken66 вне форума Ответить с цитированием
Старый 27.11.2009, 01:11   #9
Корделия
Пользователь
 
Регистрация: 28.04.2009
Сообщений: 21
По умолчанию

спасибо.
но не могли бы вы все таки второй вариант рассмотреть..а то жутко любопытно почему же она криво работает
Корделия вне форума Ответить с цитированием
Старый 27.11.2009, 01:26   #10
forsaken66
Куды бечь?
Форумчанин
 
Аватар для forsaken66
 
Регистрация: 05.10.2009
Сообщений: 104
По умолчанию

Присмотритесь. В вашем втором варианте два идущих друг за другом else. Оно у вас скомпилировалось вообще? По идее не должно бы.
Код:
if(--)
{
//operators
}
else if(---)
{
}
else
{
}
а вот такая конструкция будет работать.
Не хватало всего одного байта. Да-да, того самого, что из восьми бит состоит.
forsaken66 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с файлами ФЁкЛА Общие вопросы C/C++ 8 26.02.2009 00:16
Работа с файлами Joxter Помощь студентам 4 08.10.2008 01:17
Работа с файлами. tresh Паскаль, Turbo Pascal, PascalABC.NET 3 05.10.2008 23:32
Работа с файлами Acros Помощь студентам 5 14.02.2007 18:40