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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.03.2010, 14:17   #1
AShaggy
Новичок
Джуниор
 
Регистрация: 29.03.2010
Сообщений: 3
По умолчанию Не могу разобраться с файлами

доброго времени суток!
Проблема такая: программа заносит в файл n действительных чисел из массива, а затем она их читает.
Файл сделал бинарным.
В файл то она что-то заносит...
потом считываю и вывожу на экран. И вижу 0.000000 так и не могу понять в чем проблема.
Может кто подскажет?
Код:
#include "stdafx.h"
#include <stdio.h>
#include <malloc.h>

int main()
{
	//переменные:
	FILE *fp;
	char select;
	int n;
	double *m_chisla;
	


	puts("Vibitite deistvie (c - create file | r - read file): ");
	
	select = getchar();	

	
// создание файла
	if (select == 'c'){
		printf("Vvedite col-vo chisel: ");
			scanf("%d", &n);
			// создание массива
				m_chisla = (double *)calloc(n, sizeof(double));
			
			// Ввод исходных данных	
				printf("Vvedite chisela razdelyaya kl enter: \n");
				for (int i=0; i<n; i++) scanf("%f", &m_chisla[i]);

					fp = fopen("bd.txt", "wb");
				// запись в файл
					
						fwrite(m_chisla, sizeof(double), n, fp);
	

					fclose(fp);

						}
	else{

			
			fp = fopen("bd.txt", "rb");

			// кол-во чисел
			long size=0;
			fseek(fp, 0, SEEK_END);
			size = ftell(fp)/sizeof(double); 
			fseek(fp, 0, SEEK_SET);
			printf("%d \n", size);

			//массив чисел
			double *chisla;
			chisla = (double *)calloc(size, sizeof(double));
			//чтение из файла
			fread(chisla, sizeof(double), size, fp);
			double ch = chisla[1];

			for (int i=0; i<size; i++) printf("%f \n", chisla[i]);

			fclose(fp);
			}

	return 0;
}
AShaggy вне форума Ответить с цитированием
Старый 29.03.2010, 14:37   #2
AShaggy
Новичок
Джуниор
 
Регистрация: 29.03.2010
Сообщений: 3
По умолчанию другой вариант программы

в этом варианте не получается преобразовать строку в число (опять вижу нули)
Код:
#include "stdafx.h"
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>

//using namespace std;

int main()
{
	// Все переменные:
	FILE *fp;
	char select, temp_c;
	char c[8];
	int n;
	char **m_stroki;
	


	puts("Vibitite deistvie (c - create file | r - read file): ");
	
	select = getchar();	

	
// создание файла
	if (select == 'c'){
		printf("Vvedite col-vo chisel: ");
			scanf("%d", &n);
			// создание массива строк
				m_stroki = (char **)calloc(n, sizeof(char));
				for (int i=0; i<n; i++) m_stroki[i]=(char *)calloc(10, sizeof(char));
			
			// Ввод исходных данных	
				printf("Vvedite chisela razdelyaya kl enter: \n");
				temp_c=getchar();
				for(int i=0; i<n; i++){
					int j=0;
					temp_c = getchar();
				while(temp_c != '\n'){
					m_stroki[i][j]=temp_c;
					j++;
					temp_c = getchar();
				}}

				// for(int i=0; i<n; i++) puts(m_stroki[i]);

					fp = fopen("test_file.txt", "w");
				// запись в файл
					for (int i=0; i<n; i++){
						fputs(m_stroki[i], fp);
					fputs("\n", fp);
					}

					fclose(fp);

						}
	else{

			
			fp = fopen("test_file.txt", "r");

			// кол-во строк
			long size=0;
			while (fgets(c,10,fp)) size++;
			fseek(fp, 0, SEEK_SET);

			double *chisla;
			chisla = (double *)calloc(size,sizeof(double));

			double zn;
			char *stop;
			for (int i=0; i<size; i++)
			{
	//			zn = fscanf(fp,"fixed");
				fgets(c, 8, fp);
				for (int j=0; j<8; j++) {if(c[j]=='\0') c[j]=' '; if(c[j]=='\n') c[j]='\0';}
				puts(c);
				stop=c;
				zn = strtod(c, &stop);
				printf("%d \n", zn);
			//	chisla[i]=zn;
			}
			
//for (int i=0; i<size; i++) printf("%d \n", chisla[i]);


			fclose(fp);
			}


	return 0;
}
AShaggy вне форума Ответить с цитированием
Старый 29.03.2010, 15:00   #3
AShaggy
Новичок
Джуниор
 
Регистрация: 29.03.2010
Сообщений: 3
По умолчанию

нашел ошибку в первом варианте
Код:
 scanf("%f", &m_chisla[i]);
//а надо
 scanf("%lf", &m_chisla[i]);
позор мне

кстати вопрос остается открытым: почему во втором варианте на работает zn = strtod(c, &stop); ?

Последний раз редактировалось AShaggy; 30.03.2010 в 08:37.
AShaggy вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
не могу разобраться Var17 Общие вопросы Delphi 6 27.03.2010 01:21
[C++] Не могу разобраться ... AquaticSoul Общие вопросы C/C++ 8 24.03.2010 16:23
НЕ МОГУ РАЗОБРАТЬСЯ... GSV84 HTML и CSS 0 03.02.2010 01:38
Не могу разобраться Zmaxer Помощь студентам 24 10.10.2009 18:52