Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - [решено] Файловый ввод

Ответить
Настройки темы
C/C++ - [решено] Файловый ввод

Новый участник


Сообщения: 33
Благодарности: 12

Профиль | Отправить PM | Цитировать


Доброго времени суток, прежде всего хочется отметить, что пример. который я приведу - экзаменационный вопрос, который мне совершенно не требуется решить, просто он в в какой-то степени удачно описывает мой вопрос о вводе.

Как обеспечить ввод и символьных переменных(буквы, пробелы и т.д.) и числовых так сказать. Трудно объяснить, к чему я и привел этот билет:

В файле операционной системы "Task4.in" хранится в текстовой форме ведомость сдачи экзаменов студентами некоторой группы. Каждая строка этого файла содержит сведения об одном студенте, представленные в следующем формате:
позиции 1...2 - порядковый номер студента в группе;
позиция 3 - пробельная литера;
позиции 4...22 - фамилия студента длиной не более 19 символов в произвольном месте поля;
позиция 23 - пробельная литера;
позиция 24 - четыре оценки по четырем предметам, разделенные не менее чем одной пробельной литерой.
Количество студентов в группе равно 16. Пример строк указанного файла:

01 Андреев 5 4 5 5
02 Быков 5 5 5 5
...
16 Яковлев 4 4 5 4

1.1. Написать объявление массива структур для хранения указанной ведомости.
1.2. Написать фрагмент программы, который заполнит экзаменационную ведомость данными, вводимыми из файла операционной системы "Task4.in". Ввод данных должен осуществляться в текстовом режиме средствами языка С или С++ по усмотрению экзаменуемого.
1.3. Написать фрагмент программы, который вычисляет среднюю экзаменационную оценку по всем предметам и студентам (т.е. среднюю оценку из 64 оценок), а затем выводит значение этого показателя в файл операционной системы "Task4.out".
Примечание.
Закрыть открытые файлы, как только они станут не нужны.
Предусмотреть контроль корректности значений, возвращаемых функциями библиотеки Си "fopen", "fscanf". Указать какие включаемые файлы требуeт представленный фрагмент.
Аналогичные действия предусмотреть и при использовании средств ввода-вывода языка С++.

мое решение (далеко не первое, просто предыдущих уже не осталось)

main
Код: Выделить весь код
#include <iostream>
#include <fstream>
#include <cstdlib>
#include "rus8.h"
#include "student.h"
using namespace std;

int main(int argc, char *argv[])
{
	rus();

	if (argc < 3)
	{
		cout << "Ошибка 0 : введены не все аргументы командной строки" << endl;
		exit(0);
	}

	stud *arr = new stud[r];

	ifstream in(argv[1], ios::binary);

	read_list(in, arr);

	in.close();

	ofstream out(argv[2]);

	write_list(out, arr);

	out.close();

	return 0;
}
student.h
Код: Выделить весь код
#include <iostream>
#include <fstream>
#include <cstdlib>
using namespace std;

const int n = 2;
const int size = 12;
const int m = 14;
const int r = 4;

struct stud
{
	int num[n];
	char name[size];
	int p1, p2, p3;
};

void read_list(istream &, stud *);

void write_list(ostream &, stud *);
rus8.h
Код: Выделить весь код
#ifndef _RUS_H
    #define _RUS_H

    #include <locale.h>

    inline void rus( void ) 
    {     
        setlocale( LC_CTYPE, ".1251" );
        setlocale( LC_MONETARY, ".1251" );

        return;
    }

#endif
student.cpp
Код: Выделить весь код
#include "student.h"

void read_list(istream &in, stud *arr)
{
	char temp[m];
	for(int i = 0; i < r; i++)
	{
		for(int p = 0; p<n; p++)
		{
			in >> arr[i].num[p];
		}
		for(int z = 0; z<m; z++)
			in >> temp[z];
		in >> arr[i].p1 >> arr[i].p2 >> arr[i].p3;
		for(int q = 0; q < size; q++)
		{
			arr[i].name[q] = temp[q+1];
		}
	}
}

void write_list(ostream &out , stud *arr)
{
	for(int i = 0; i < r; i++)
	{
		for(int q = 0; q < n; q++)
			out << arr[i].num[q];
		out << " ";
		for(int w = 0; w < size; w++)
			out << arr[i].name[w];
		out << " " << arr[i].p1 << " " << arr[i].p2 << " " << arr[i].p3 << endl;
	}
}
в этом случае я решил попробовать решить эту проблему с помощью дополнительного массива символов и открытия файла в бинарном режиме, правда опять не помогло.

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

Отправлено: 01:44, 20-01-2010

 

Новый участник


Сообщения: 33
Благодарности: 12

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
#include <string>
Код: Выделить весь код
struct stud
{
	int num;
	string name;
	int p1, p2, p3;
};
Код: Выделить весь код
void read_list(istream &in, stud *arr)
{
	for(int i = 0; i < r; i++)
	{
		in >> arr[i].num >> arr[i].name;
		in >> arr[i].p1 >> arr[i].p2 >> arr[i].p3;
	}
}
на все надо смотреть проще... либо чаще отдыхать)

решил
Это сообщение посчитали полезным следующие участники:

Отправлено: 05:40, 20-01-2010 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - [решено] Файловый ввод

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
[решено] Из простого компа в файловый сервер..... Bullet-Avalon Хочу все знать 13 02-10-2009 16:27
[Решено] Ввод компьютера в домен Tyran Microsoft Windows NT/2000/2003 12 20-11-2008 21:16
C++ Builder || Файловый ввод/вывод Sir Z Программирование и базы данных 7 04-11-2006 17:41
Основы C++ | Файловый ввод Skrip Программирование и базы данных 12 05-08-2005 18:52
Файловый ввод-вывод в ring0 wano Программирование и базы данных 13 12-11-2002 18:21




 
Переход