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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.02.2010, 17:12   #1
серг
Форумчанин
 
Регистрация: 02.11.2009
Сообщений: 179
По умолчанию файлы в Си

проблема в том что не пойму принцип работы функций записи в файл и вывода его содержимого на экран прочитал много литературы но чет ничего дельного не нашел может невнимателно читал ??? помогите разобраться пожалуйста
нужно чтобы
в функции ввода исходные данные записывались в файл в файл;
в функциях обработки и вывода данные читать из файла, результат сохранять в файл
и вывод результата рабаты программы осуществлять из файла

программа вводит произвольно массив из 2о ти элементов и считает количество четных и нечетных элементов в нем
вот код
Код:
#include<stdio.h>                 
#include<conio.h>                      
#include<stdlib.h>
#include <time.h>

int read_m (int*MAS, int p);
int write_m (int*MAS, int p);
int raschet_ch (int*MAS, int p);
int raschet_n (int*MAS, int p);
int write_s (int a,int b);

int main ()
{ int const p=19;
  int mas[p];
  int*MAS;
  MAS=mas;
  int ch,n;
read_m (MAS,p);
write_m (MAS,p);
ch=raschet_ch (MAS,p);
n=raschet_n (MAS,p);
write_s(ch,n);

return(0);
 }
   int read_m (int*MAS, int p)
   {
	int i;
	FILE *file;
	void srand(unsigned int seed);
    int rand (void);
    srand ( (unsigned)time(NULL) );
 if ((file = fopen("1.txt","w")) == NULL)
     printf("Файл невозможно открыть или создать\n");
     else{
    for (i=0;i<p;i++)
   *(MAS+i)=rand()%100;
	fwrite(*(MAS+i));}
	 fclose(file);
    return(0);
   }


   int raschet_ch (int*MAS, int p)
   {
	int i;
    int ch=0;
	 FILE *file;
     if ((file = fopen("1.txt","w")) == NULL)
     printf("Файл невозможно открыть или создать\n");
     else{
   for (i=0;i<p;i++)
   if (*(MAS+i)%2==0)
   ch=ch++;
   int a=ch;
   fwrite(a);
   fclose(file);
   return(0);
   }

int raschet_n (int*MAS, int p)
   {
	int i;
   int n=0;
    FILE *file;
   if ((file = fopen("1.txt","w")) == NULL)
     printf("Файл невозможно открыть или создать\n");
     else{
   for (i=0;i<p;i++)
   if (*(MAS+i)%2!=0)
   n=n++;
   int b=n;
   fwrite(b);
   fclose(file);
   return(0);
   }

int write_s (int a,int b)
{ 
FILE *file;
if ((file = fopen("1.txt","w")) == NULL)
printf("Файл невозможно открыть или создать\n");
else{
fprintf("kolichestvo chetnbIx elementov: %d",a);
fprintf(" \n");
fprintf("kolichestvo nechetnbIx elementov: %d",b);
fclose(file);
getch();
return(0);
 }
серг вне форума Ответить с цитированием
Старый 03.02.2010, 17:39   #2
серг
Форумчанин
 
Регистрация: 02.11.2009
Сообщений: 179
По умолчанию

и еще один вопрос подскажите с помощью какой функции можно дописывать данные в файл не стирая предыдущих
серг вне форума Ответить с цитированием
Старый 03.02.2010, 17:47   #3
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,091
По умолчанию

При открытии файла вместо "w" можно указать флаг "a" и тогда указатель будет в конце файла, т.е. данные впоследствии будут дописываться в конец файла. Так же есть функция fseek, посредством которой можно переместить указатель на произвольный байт файла, в том числе и в конец файла. Если я правильно помню, то это будет выглядеть так:
Код:
fseek (file,0,SEEK_END);
Последующие вызовы fwrite будут дописывать данные в конец файла.
pu4koff вне форума Ответить с цитированием
Старый 03.02.2010, 17:52   #4
devl
Пользователь
 
Регистрация: 28.10.2009
Сообщений: 20
По умолчанию

Режимы доступа к файлам:
r - чтение
w - запись
w+ - создать файл для записи
a - открыть файл для записи в конец
+ модификаторы режима открытия:
t - текстовый режим
b - бинарный режим

Так же проверяй фигурные скобки - если в for, if, if-else должны выполняться несколько операторов, то их нужно брать в фигурные скобки.

так же, функции fwrite, fread - это функции для записи в бинарном режиме, и имеют 3 параметра (если не ошибаюсь): буфер, количество байт, файловая переменная.
Для записи чтения в текстовом режиме: fprintf, fscanf. Разница с обычными printf и scanf - первый аргумент это файловая переменная.
devl вне форума Ответить с цитированием
Старый 03.02.2010, 17:57   #5
серг
Форумчанин
 
Регистрация: 02.11.2009
Сообщений: 179
По умолчанию

спасибо и еще один вопрос как исправить ошибку :error C2660: 'fwrite' : function does not take 1 arguments
серг вне форума Ответить с цитированием
Старый 03.02.2010, 18:03   #6
devl
Пользователь
 
Регистрация: 28.10.2009
Сообщений: 20
По умолчанию

Так перевод ошибки с английского звучит как "Функция принимает не 1 аргумент", а ты передаешь один. Какие нужно передавать смотри выше.
devl вне форума Ответить с цитированием
Старый 03.02.2010, 18:03   #7
серг
Форумчанин
 
Регистрация: 02.11.2009
Сообщений: 179
По умолчанию

и все таки никак не получается сделать код рабочим помогиет пожалуйста
серг вне форума Ответить с цитированием
Старый 03.02.2010, 18:09   #8
серг
Форумчанин
 
Регистрация: 02.11.2009
Сообщений: 179
По умолчанию

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

int read_m (int*MAS, int p);
int write_m (int*MAS, int p);
int raschet_ch (int*MAS, int p);
int raschet_n (int*MAS, int p);
int write_s (int a,int b);

int main ()
{ int const p=19;
  int mas[p];
  int*MAS;
  MAS=mas;
  int ch,n;
read_m (MAS,p);
write_m (MAS,p);
ch=raschet_ch (MAS,p);
n=raschet_n (MAS,p);
write_s(ch,n);

return(0);
 }
   int read_m (int*MAS, int p)
   {
	int i;
	FILE *file;
	void srand(unsigned int seed);
    int rand (void);
    srand ( (unsigned)time(NULL) );
 if ((file = fopen("1.txt","w")) == NULL)
     printf("Файл невозможно открыть или создать\n");
     else{
    for (i=0;i<p;i++)
   *(MAS+i)=rand()%100;
	fwrite( "1.txt","a",*(MAS+i));
	 }
	 fclose(file);
    return(0);
   }


   int raschet_ch (int*MAS, int p)
   {
	int i;
    int ch=0;
	 FILE *file;
     if ((file = fopen("1.txt","r")) == NULL)
     printf("Файл невозможно открыть или создать\n");
     else{
   for (i=0;i<p;i++)
   if (*(MAS+i)%2==0)
   ch=ch++;
   int a=ch;
   fwrite("1.txt","a",a);
   fclose(file);
   return(0);
   }

int raschet_n (int*MAS, int p)
   {
	int i;
   int n=0;
    FILE *file;
   if ((file = fopen("1.txt","a")) == NULL)
     printf("Файл невозможно открыть или создать\n");
     else{
   for (i=0;i<p;i++)
   if (*(MAS+i)%2!=0)
   n=n++;
   int b=n;
   fwrite("1.txt","a",b);
   fclose(file);
   return(0);
   }

int write_s (int a,int b)
{ 
FILE *file;
if ((file = fopen("1.txt","r")) == NULL)
printf("Файл невозможно открыть или создать\n");
else{
fprintf("1.txt","t",a);
fprintf(" \n");
fprintf("1.txt","t",b);
fclose(file);
getch();
return(0);
 }
теперь ошибка : error C2660: 'fwrite' : function does not take 3 arguments объясните как правильно писать
серг вне форума Ответить с цитированием
Старый 03.02.2010, 18:13   #9
серг
Форумчанин
 
Регистрация: 02.11.2009
Сообщений: 179
По умолчанию

объясните плиз оч прошу чет никак не врублюсь как правильно
серг вне форума Ответить с цитированием
Старый 03.02.2010, 18:32   #10
devl
Пользователь
 
Регистрация: 28.10.2009
Сообщений: 20
По умолчанию

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

int read_m(int*MAS, int p);
int write_m(int*MAS, int p);
int raschet_chetnie(int*MAS, int p);
int raschet_nechetnie(int*MAS, int p);
int write_s(int a,int b);

int main()
{ 
	int const p=19;
	int mas[p];
	int ch,n;
	read_m (mas,p);
	write_m (mas,p);
	ch=raschet_chetnie(mas,p);
	n=raschet_nechetnie(mas,p);
	write_s(ch,n);
	getch();
	return 0;
}

int read_m (int*MAS, int p)
{
	int i;
	FILE *file;
	srand ( (unsigned)time(NULL) );
	if ((file = fopen("1.txt","at")) == NULL)
		printf("Файл невозможно открыть или создать\n");
	else
	{
    	for (i=0;i<p;i++)
		{
  			*(MAS+i)=rand()%100;
			fprintf(file,"%d ",*(MAS+i));
		}
	 	fclose(file);
	}
    return 0;
}

int raschet_chetnie(int*MAS, int p)
{
	int i;
	int ch=0;
	FILE *file;
	if ((file = fopen("1.txt","at")) == NULL)
		printf("Файл невозможно открыть или создать\n");
	else
	{
		for (i=0;i<p;i++)
		{
			if (*(MAS+i)%2==0)
			{
  				ch++;
				fprintf(file,"%d ",&ch);
			}
		}
  		fclose(file);
	}
	return 0;
}

int raschet_nechetnie(int*MAS, int p)
{
	int i;
	int ch=0;
	FILE *file;
	if ((file = fopen("1.txt","at")) == NULL)
		printf("Файл невозможно открыть или создать\n");
	else
	{
		for (i=0;i<p;i++)
		{
			if (*(MAS+i)%2!=0)
			{
  				ch++;
				fprintf(file,"%d ",&ch);
			}
		}
  		fclose(file);
	}
	return 0;
}

int write_s (int a,int b)
{ 
	FILE *file;
	if ((file = fopen("1.txt","at")) == NULL)
		printf("Файл невозможно открыть или создать\n");
	else
	{
		fprintf(file,"kolichestvo chetnbIx elementov: %d\n",a);
		fprintf(file,"kolichestvo nechetnbIx elementov: %d",b);
		fclose(file);
	}
	return 0;
}
Учись читать ошибки (сам текст хотя бы переводи, компилятор же тебе не просто код говорит, а вполне осмысленное объяснение), а также соблюдай лестничный стиль кода - легче читать код и разбираться что где. Так же, обявление перемнной внутри цикла не есть хорошая идея, особенно если можно обойтись без неё.
devl вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Файлы delete Общие вопросы C/C++ 1 26.12.2009 21:31
.Х файлы Pedro Gamedev - cоздание игр: Unity, OpenGL, DirectX 3 20.10.2009 23:39
Файлы werser Помощь студентам 4 29.12.2008 23:20
Файлы в С++ Sanakan Помощь студентам 2 28.12.2008 14:24
два вредных вопроса:про асю и прикриплёные файлы файлы steck Свободное общение 3 17.06.2007 14:53