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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.07.2012, 22:15   #1
Артём Волжанкин
Пользователь
 
Аватар для Артём Волжанкин
 
Регистрация: 07.07.2012
Сообщений: 99
По умолчанию Функции и файлы (С++)

Прошу посмотреть выполненное мною задание и если есть замечания или как вы считаете неверный подход, то готов это узнать. Просто хочется понять мои недочеты-ошибки и работать над ними (исправлять).

Для хранения данных описать структуру (описана в соответствии с заданием).
Написать функцию для записи в бинаный файл данных из структуры.
Структура файла:
в первых двух байтах значение типа int, определяющее количество сделанных записей.

Написать функцию, которая извлекает данный из файла.

Код:
#include<fstream>
#include<iostream>
#include<string.h>
#include<string>
#include<stdio.h>
#include<stdlib.h>
#include<fstream>
using namespace std;

struct scan_info{
		char model[25]; 
		int price;
		double x_size;
		double y_size;
		int optr;
		int grey;
	};

int zapolnenie(int* l, scan_info mas[]){
	int k=*l;
	cout << "Заполнение структуры\n";
	cout << "Введите название модели\n";
	cin >> mas[*l].model;
	cout << "Введите цену\n";
	cin >> mas[*l].price;
	cout << "Горизонтальный размер области сканирования\n";
	cin >> mas[*l].x_size;
	cout << "Вертикальный размер области сканирования\n";
	cin >> mas[*l].y_size;
	cout << "Оптическое разрешение\n";
	cin >> mas[*l].optr;
	cout << "Число градаций серого\n";
	cin >> mas[*l].grey;
	cout << "Введите 1 для выхода или 0 - для продожения \n";
	int par;
	k++;
	cin >> par;
	if (par == 1) 
		return k; 
	else { 
		zapolnenie(&k, mas);
	}

}

int zapisVFail(int kol, scan_info mas[]){
	cout << "Зашли в функцию zapisVFail\n";
	cout << "Количество проходов\n" << kol << "\n";
	fstream f("C:\\cpp\\text1.txt", ios_base::in);
	if (!f.is_open()) {
		cout << "Невозможно открыть файл";
		return -1;
	}
		f << kol;

		for (int i=0; i<kol; i++){
		f << mas[i].model;
		f << mas[i].price;
		f << mas[i].x_size;
		f << mas[i].y_size;
		f << mas[i].optr;
		f << mas[i].grey;
	}
		f.close();
		return 0;
}

int shtenieIzFaila(scan_info mas[]){
	cout << "Зашли в функцию shtenieIzFaila\n";
	fstream f("C:\\cpp\\text1.txt", ios_base::out);
	if (!f.is_open()) {
		cout << "Невозможно открыть файл\n";
		return -1;
	}
		int kol;
		f >> kol;
		for (int i=0; i<kol; i++){
		f >> mas[i].model;
	
		f >> mas[i].price;

		f >> mas[i].x_size;
	
		f >> mas[i].y_size;
		
		f >> mas[i].optr;
		
		f >> mas[i].grey;
		
		}
	
	f.close();
	return 0;

}

void main(){

	int m=0;					// первая запись для функции
	int *p=&m;					// создаем указатель для передачи в функцию
	scan_info mas[8];			// массив структур по заданию
	scan_info *pa=mas;			// указатель на массив для передачи в функцию
	m=zapolnenie(&m, pa);		// вызываем функцию заполнения и сохраняем в м количество заполнений
	cout << "Записываем в файл массив\n";
	zapisVFail(m, pa);			// записываем в файл массив
	cout << "Чтение из файла в структуру\n";
	shtenieIzFaila(pa);			//чтение из файла в структуру
	cout << "Вывод структуры на экран\n";
	for (int i=0; i<m; i++){
		cout << "-----------------------------------\n";
		cout << "         " << i+1 << "\n";
		cout << mas[i].model << "\n";
		cout << mas[i].price << "\n";
		cout << mas[i].x_size << "\n";
		cout << mas[i].y_size << "\n";
		cout << mas[i].optr << "\n";
		cout << mas[i].grey << "\n";
	}



	system("PAUSE");
}
Человек
Артём Волжанкин вне форума Ответить с цитированием
Старый 17.07.2012, 07:34   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
int* l
Зачем указатель? Тут без него можно.
Цитата:
zapisVFail(m, pa); // записываем в файл массив
А где проверка на ошибку? У тебя предусмотренно в случае ошибки результат -1, почему не проверяешь?
Цитата:
shtenieIzFaila(pa); //чтение из файла в структуру
Аналогично. Зачем делать обработчики ошибок, если не используешь их?
Цитата:
else {
zapolnenie(&k, mas);
}
Почему рекурсией? Чем простой цикл не устроил?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 17.07.2012, 09:12   #3
Артём Волжанкин
Пользователь
 
Аватар для Артём Волжанкин
 
Регистрация: 07.07.2012
Сообщений: 99
По умолчанию

Спасибо за ответ.
Цитата:
Зачем указатель? Тут без него можно.
Мне надо было чтобы функция меняла значение m.

Проверки действительно не организовал.

Цитата:
Почему рекурсией? Чем простой цикл не устроил?
Что-то в голову стукнуло.
Если циклом, то нужно передавать в функцию колличество элементов массива
Человек
Артём Волжанкин вне форума Ответить с цитированием
Старый 17.07.2012, 09:37   #4
Last
В прострации
Форумчанин
 
Регистрация: 13.01.2009
Сообщений: 239
По умолчанию

Цитата:
Сообщение от Артём Волжанкин Посмотреть сообщение
Мне надо было чтобы функция меняла значение m.
Можно передавать значение по ссылке:
Код:
func(&m);
Пол-жизни сидючи, в монитор глядючи...
Last вне форума Ответить с цитированием
Старый 17.07.2012, 09:53   #5
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,372
По умолчанию

Цитата:
Сообщение от Артём Волжанкин Посмотреть сообщение
Структура файла:
в первых двух байтах значение типа int, определяющее количество сделанных записей.
Мне чисто любопытно - структура файла тоже описана в задании или каждый придумывает сам?
waleri на форуме Ответить с цитированием
Старый 17.07.2012, 11:19   #6
Артём Волжанкин
Пользователь
 
Аватар для Артём Волжанкин
 
Регистрация: 07.07.2012
Сообщений: 99
По умолчанию

Цитата:
Мне чисто любопытно - структура файла тоже описана в задании или каждый придумывает сам?
В задание.
Человек

Последний раз редактировалось Артём Волжанкин; 17.07.2012 в 11:20. Причина: дополнил цитатой
Артём Волжанкин вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Функции, текстовые файлы, таблички. meta Паскаль, Turbo Pascal, PascalABC.NET 1 12.01.2011 12:12
Строки, записи и файлы, процедуры функции Gray_Mc Фриланс 8 24.11.2010 16:21
Функции, Двумерный массив, Записи, Файлы Goroh Паскаль, Turbo Pascal, PascalABC.NET 1 21.06.2010 14:36
Указатели. Файлы. Функции Duleks Общие вопросы C/C++ 1 15.10.2008 13:53
DOS. .*bat файлы. их функции Xeon332 Помощь студентам 2 08.05.2008 14:46