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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.12.2010, 01:24   #1
ХреновыйПрогер
Пользователь
 
Регистрация: 17.11.2010
Сообщений: 16
По умолчанию Работа с файлами в структурах

Написал вот такую хреновину на Си

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

typedef struct ocenki
	{
		char matan[2];
		char lin[2];
		char fizika[2];
		char prog[2];
	};

typedef struct people
	{
		char name[50];
		char lastname[50];
		char fname[50];
	};

main(void)
{
	FILE *fp;
	char ch, i=0;

	setlocale(LC_ALL,"Russian");
	if((fp=fopen("1.txt", "r"))==NULL) 
	{
		printf("He удается открыть файл.\n");
		exit(1);
	}



}
Запнулся на том, как достать и заполнить структуры моими данными из тхт.
вид тхт такой:

Имя, Фамилия, Отчество, (оценка), (оценка), (оценка), (оценка)

П.С. знаю что тема заезженная, но что делать, всё что нашёл, мало помогло.

Последний раз редактировалось ХреновыйПрогер; 22.12.2010 в 01:28.
ХреновыйПрогер вне форума Ответить с цитированием
Старый 22.12.2010, 10:08   #2
ХреновыйПрогер
Пользователь
 
Регистрация: 17.11.2010
Сообщений: 16
По умолчанию

вот я немного переделал условие. Вывода
хочу вывести что то вроде такого
2 3 4 5
3 2 1 3
5 1 2 3

вот код
Код:
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>

typedef struct ocenki
    {
        char matan[2];
        char lin[2];
        char fizika[2];
        char prog[2];
    };
struct ocenki ocenki2;

typedef struct people
    {
        char name[50];
        char lastname[50];
        char fname[50];
    };

main(void)
{
    FILE *fp;
    char ch, i=0;

    setlocale(LC_ALL,"Russian");
    if((fp=fopen("1.txt", "rb"))==NULL) 
    {
        printf("He удается открыть файл.\n");
        exit(1);
    }

//    fread(&ocenki2,sizeof(ocenki2),1,fp);

    while (!feof(fp)) {
    printf("\n %s  %s  %s",ocenki2.matan, ocenki2.lin, ocenki2.proga, ocenki2.fizika);
    fread(&ocenki2,sizeof(ocenki2),1,fp);
    }
}
даже это прочесть не получается, помогите хотя бы с этим. В чём ошибка?

Последний раз редактировалось ХреновыйПрогер; 22.12.2010 в 10:23.
ХреновыйПрогер вне форума Ответить с цитированием
Старый 22.12.2010, 12:40   #3
UltimaBeaR
Форумчанин
 
Аватар для UltimaBeaR
 
Регистрация: 21.12.2010
Сообщений: 199
По умолчанию

1) ты сначала выводишь на печать а потом считываешь - надо наоборотъ
2) если ты считываешь с файла целиком структуру, у структуры надо убрать выравнивание, делается так:
Код:
#pragma pack(push, 1)
// Определения нужных структур
#pragma pack(pop)
UltimaBeaR вне форума Ответить с цитированием
Старый 23.12.2010, 00:59   #4
ХреновыйПрогер
Пользователь
 
Регистрация: 17.11.2010
Сообщений: 16
По умолчанию

смог вбить данные. Получилось по детски. Ну пока покатит.. Далее вопрос, как посчитать base[i].matan+base[i].fizika и записать base[i].surname и base[i].surname только одной первой буквой. то есть нужно сделать инициалы..
вот мой позорный код:
Код:
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#define N 5

    struct _base
    {
        char name[50];
        char lastname[50];
        char fname[50];
        char matan[1];
        char lin[1];
        char fizika[1];
        char prog[1];
    } base[N];

main(void)
{
    FILE *fp;
    char ch, i=0, a, n;

    setlocale(LC_ALL,"Russian");
    if((fp=fopen("1.txt", "rb"))==NULL) 
    {
        printf("He удается открыть файл.\n");
        exit(1);
    }


    while (!feof(fp))
    {
        n=i;
        fscanf(fp,"%s%s%s%s%s",base[i].name, base[i].lastname, base[i].fname, base[i].matan, base[i].fizika, 1);
        i++;
    }
    fclose(fp); 
    
    for(i=0;i<n;i++)
    {

        printf("%s %s %s %s\n", base[i].name, base[i].lastname, base[i].fname, base[i].matan);    
    } 

}
ХреновыйПрогер вне форума Ответить с цитированием
Старый 23.12.2010, 14:28   #5
UltimaBeaR
Форумчанин
 
Аватар для UltimaBeaR
 
Регистрация: 21.12.2010
Сообщений: 199
По умолчанию

чтоб посчитать надо сначало перевести из строки в число, потом считать

насчет surname не понял, если тебе надо 1ый символ узнать то обращаешся к массиву surname[0] вот и будет первая буква
UltimaBeaR вне форума Ответить с цитированием
Старый 23.12.2010, 21:46   #6
ХреновыйПрогер
Пользователь
 
Регистрация: 17.11.2010
Сообщений: 16
По умолчанию

Всё разобрался. Тема закрыта.
ХреновыйПрогер вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
работа с файлами imperceptible4462 Помощь студентам 0 24.10.2010 10:09
Работа с файлами jimmywoodes Общие вопросы C/C++ 1 25.01.2010 00:08
Работа с файлами. Си jimmywoodes Помощь студентам 1 24.01.2010 22:03
Массивы и структуры в структурах (Задача в С++) bel_ka Общие вопросы C/C++ 4 16.12.2007 15:31