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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.02.2011, 00:47   #1
masashama
Учусь слушать
Пользователь
 
Регистрация: 30.01.2011
Сообщений: 66
Смущение Фаил и массив структур.

Помогите написать программу которая считывала бы и выводила данные из файла, а то я запарилса.
Вод код программы который записывает в фаил:
Код:
#include "stdafx.h"
#include <cstdlib>
#include <iostream>
#include <string>
#include <fstream>

using namespace std;

int main()
{
	struct base
	{
	   char name[20], fam[20], otch[20];
	   float rost,ves,let;
	   int grup_krov;
          } stud[3];

	int i;
	char nam [3] [20],fa [3] [20],ot [3] [20];

        for(i=0; i<=2; i++)
	  {
		cout<<"Name: "; cin>>nam[i];
		cout<<"Fam: ";  cin>>fa[i];
		cout<<"Otch: "; cin>>ot[i];
		cout<<"Rost: "; cin>>stud[i].rost;
		cout<<"Ves: "; cin>>stud[i].ves;
		cout<<"Vozvrast: "; cin>>stud[i].let;
		cout<<"Gruppa krovi: "; cin>>stud[i].grup_krov;
           };

 	for (i=0; i<=2; i++)
	  {
		strncpy_s(stud[i].name, nam[i], 19);
		strncpy_s(stud[i].fam, fa[i], 19);
		strncpy_s(stud[i].otch, ot[i], 19);
	  };

	FILE *fil=fopen("struct","w");
	if(!fil) return -1;
	fwrite(stud,sizeof(base),3,fil);
	fclose(fil);

	system("pause");
	return 0;
}

Вот пример неудачной попытки открыть фаил и считать из него

Код:
int main()
{
	struct base
	{
	   char name[20], fam[20], otch[20];
	   float rost,ves,let;
	   int grup_krov;
        } test[3];
	
	
	FILE *fil=fopen("struct","r");
	if (!fil) return -1;
	 fread(test, sizeof(base), 3, fil);

	 for(int i=0; i<=2; i++)
	   {
		cout<<"Name: "<<test[i].name<<"\n";
		cout<<"Fam: "<<test[i].fam<<"\n";
		cout<<"Otch: "<<test[i].otch<<"\n";
		cout<<"Rost: "<<test[i].rost;
		cout<<" Ves: "<<test[i].ves;
		cout<<" Vozvrast: "<<test[i].let<<"\n";
		cout<<"Gruppa krovi: "<<test[i].grup_krov<<"\n";
	   };
	 system("pause");
	return 0;
}
Вообщем пожалуйста помогите разобраться как записывать и считывать из файла, особенно подробнее если можно про функции fwrite и fread.
И про создание и открытие файла у мну компилятор ругаеться на то что не может открыть фаил а первая программа вроде работает правильно
Люблю программировать =)

Последний раз редактировалось masashama; 08.02.2011 в 01:43.
masashama вне форума Ответить с цитированием
Старый 08.02.2011, 05:09   #2
Obey-Kun
Линуксоид
Участник клуба
 
Аватар для Obey-Kun
 
Регистрация: 31.07.2009
Сообщений: 1,403
По умолчанию

Раз ты пишешь на C++, то и используй фичи C++. А именно классы и работу с файлами в стиле плюсов.
Ты знаешь, что такое классы?
И вот так с файлами в плюсах работают:
Код:
    std::ifstream file(filename , std::ifstream::in);
    if (!file.good()) {
        std::cerr << "No file " << filename << std::endl;
        std::exit(1);
    }

    std::string line;
    while(std::getline(file,line))
    {
        //считываем одну строку
        std::stringstream line_stream(line);
        std::string cell;
        int i = 0;
        Point point;
        while(std::getline(line_stream,cell,',')) {
            //считываем один блок из строки (блоки разделены запятыми)
            ++i;
            if(i > 2) {
                break;
            }
            double v;
            if (!(std::istringstream(cell) >> v)) {
                // если не удалось перевести блок в число, это плохой ввод
                std::cerr << "bad input: " << line_stream << std::endl;
               exit(1);
            }

            //запоминаем число
        }

        //запоминаем всё считанное из строки
    }
В моём случае она считывает из файла значения, разделённые запятой.
Я схожу с ума или это глючит реальность?
Jabber ID: obey@obey.su

Последний раз редактировалось Obey-Kun; 08.02.2011 в 06:49.
Obey-Kun вне форума Ответить с цитированием
Старый 08.02.2011, 08:49   #3
masashama
Учусь слушать
Пользователь
 
Регистрация: 30.01.2011
Сообщений: 66
По умолчанию

Хм, то есть совмещение функций с/с++ не есть хорошо, или они могут конфликтовать, Обей-кун напиши пожалуйста две программы если не трудно по записи в фаил структуры и считывания из файла структуры, а то твой код для меня пока трудновато разобрать, структуру можно одну, а не массив. Чтоб я лучша понял что к чему.
Люблю программировать =)
masashama вне форума Ответить с цитированием
Старый 08.02.2011, 09:14   #4
masashama
Учусь слушать
Пользователь
 
Регистрация: 30.01.2011
Сообщений: 66
По умолчанию

Так ребята, проблема решилась когда я написал выше приведенные мною коды в одну программу а не в разные то все отлично заработало =) Теперь вопрос другой как заделать так что бы записывание и считывание были в разных прогах?
Люблю программировать =)
masashama вне форума Ответить с цитированием
Старый 08.02.2011, 09:20   #5
NiCola999
Не
Участник клуба
 
Регистрация: 29.10.2009
Сообщений: 1,456
По умолчанию

1)
Код:
FILE *fil=fopen("struct","wb");
2)
Код:
FILE *fil=fopen("struct","rb");
3) 2ая прога:
Код:
system("pause");
fclose(fil);
NiCola999 вне форума Ответить с цитированием
Старый 08.02.2011, 09:42   #6
Obey-Kun
Линуксоид
Участник клуба
 
Аватар для Obey-Kun
 
Регистрация: 31.07.2009
Сообщений: 1,403
По умолчанию

Цитата:
Хм, то есть совмещение функций с/с++ не есть хорошо, или они могут конфликтовать
Это плохо в плане идеологии. Если уж использовать C++, то на всю катушку.

Я тебе вопрос задал насчёт классов. Ты в курсе, что такое классы и чем они отличаются от структур в стиле C?
Я схожу с ума или это глючит реальность?
Jabber ID: obey@obey.su
Obey-Kun вне форума Ответить с цитированием
Старый 08.02.2011, 09:49   #7
NiCola999
Не
Участник клуба
 
Регистрация: 29.10.2009
Сообщений: 1,456
По умолчанию

да у него из с++ тут только ввод/вывод и поключение пространства std. Это проект visual studio, а там нету спец проекта для языка Си. И если сверху написано iostream, то это вовсе не значит, что ТС нужно писать на с++.
NiCola999 вне форума Ответить с цитированием
Старый 08.02.2011, 10:56   #8
Obey-Kun
Линуксоид
Участник клуба
 
Аватар для Obey-Kun
 
Регистрация: 31.07.2009
Сообщений: 1,403
По умолчанию

но ведь cout он использует
Я схожу с ума или это глючит реальность?
Jabber ID: obey@obey.su
Obey-Kun вне форума Ответить с цитированием
Старый 08.02.2011, 11:01   #9
NiCola999
Не
Участник клуба
 
Регистрация: 29.10.2009
Сообщений: 1,456
По умолчанию

а если я сделаю вывод с помощью ассемблерной вставки, это тоже плохо? че надо всё обяз. писать строго на одном языке? это бред. Если язык с++, то это не значит, что нельзя использовать библиотеки Си.

Последний раз редактировалось NiCola999; 08.02.2011 в 11:04.
NiCola999 вне форума Ответить с цитированием
Старый 08.02.2011, 11:04   #10
kaljan775
:D
Форумчанин
 
Аватар для kaljan775
 
Регистрация: 26.09.2010
Сообщений: 570
По умолчанию

давайте в с++ коде начнем на яве писать, или на фортране
Пишу ПО, создаю сайты, делаю курсовые работы, за деньги
C#, .NET, MS SQL, AngularJS, HTML, jQuery
kaljan775 вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
массив структур Litoi Помощь студентам 6 09.01.2011 22:00
Массив структур nondeadlollipop Помощь студентам 1 11.12.2010 09:28
массив структур klykovka Общие вопросы C/C++ 4 19.04.2010 16:17
массив структур Help_me_please Помощь студентам 3 16.01.2010 02:19
Массив структур velvetdust Общие вопросы C/C++ 0 21.03.2009 13:18