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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.05.2009, 19:39   #1
Tesmont
Пользователь
 
Регистрация: 12.05.2009
Сообщений: 28
По умолчанию проблема с чтением из файла

Код:
#pragma hdrstop
#pragma argsused
#include <stdio.h>
#include <tchar.h>
#include <iostream.h>
#include <conio.h>

FILE *st;
FILE *vrem;
FILE *zad;

struct pr
{
	char name[20];
	int oz;
};

struct sess
{
    int coutpr;
struct pr pred[10];
};

struct s
{
	char fam[25];
	char name[25];
	char db[10];
	char dp[10];
	char fak[25];
	char kaf[25];
	int zach;
	float procent3;
	struct sess sem[9];
}stud,stud2;

long size

razmer(){
	st = fopen("stud.dat","r");
	fseek(st,0,SEEK_END);
	size = ftell(st);
	fclose(st);
}


zapis(){
	int sem_n,j;
	char more,moresem,pisat;
	moresem = 'Y'; pisat = 'N';
	cout << "Famili9: "; cin >> stud.fam;
	cout << "Im9: "; cin >> stud.name;
	cout << "God Rogdeni9: "; cin >> stud.db;
	cout << "God postupleni9: "; cin >> stud.dp;
	cout << "Fakkultet: "; cin >> stud.fak;
	cout << "Kafedra: "; cin >> stud.kaf;
	cout << "Zachetka: "; cin >> stud.zach;
	cout << "Vvesti ocenki?"; cin >> pisat;
	if (pisat == 'Y') {
		for (sem_n = 0; sem_n <= 9; sem_n++) {
			more = 'Y';
			j = 0; stud.sem[sem_n].coutpr = 0;
			cout << sem_n+1<< " semestr"<< '\n'<< "---------------------------------------"<< '\n';
			cout << "Vvesti ozenki za etot semestr (Y/N?) ";
			cin >> moresem;
			if (moresem == 'N'){
				moresem == 'Y';
				continue;
			}
			while (more !='N'){
				cout << "predmet: "; cin >> stud.sem[sem_n].pred[j].name;
				cout << "ozenka: "; cin >> stud.sem[sem_n].pred[j++].oz;
				cout << "more (Y/N)?: "; cin >> more;
				stud.sem[sem_n].coutpr++;
				if (j >= 18){
					cout << "Massiv zapolnen";
					break;
				}
			}
		}
	}
}

vivodsess(int nomer){
	st = fopen("stud.dat","r");
	int k = 0; int coutpr;
	fseek(st,((nomer-1)*sizeof(struct s)),SEEK_SET);
	fread(&stud, sizeof(struct s), 1, st);
	for (int i = 0; i < 5; i++) {
		k++;
		printf("%-2i%-40s%-2i%-40s\n",k,"semestr",k+1,"semestr");
		printf("%-20s%-20s%-20s%-20s\n","predmet","ozenka","predmet","ozenka");
		if (stud.sem[k-1].coutpr > stud.sem[k].coutpr)
			coutpr = stud.sem[k-1].coutpr;
		else
			coutpr = stud.sem[k].coutpr;
		for (int l = 0; l < coutpr; l++) {
			printf("%-20s%-20i%-20s%-20i\n", stud.sem[k-1].pred[l].name,stud.sem[k-1].pred[l].oz, stud.sem[k].pred[l].name, stud.sem[k-1].pred[l].oz);
		}
		k++;
	}
	fclose(st);
	return 0;
}

vivodspiska(){
	int nomer,i,nomerdeiy;
	razmer();
	st = fopen("stud.dat","r");
	printf("%-5s%-1s%-14s%-1s%-10s%-1s%-6s%-1s%-6s%-1s%-8s%-1s%-8s%-1s%-6s","Nomer","|","Famili9","|","Im9","|","DB","|","DP","|","Fakultet","|","Kafedra","|","Zachetka\n");
	for (int i=0; i < size/sizeof(struct s); i++) {
		fread(&stud, sizeof(struct s), 1, st);
		printf("%-5i%-1s%-14s%-1s%-10s%-1s%-6s%-1s%-6s%-1s%-8s%-1s%-8s%-1s%-6i\n",i+1,"|", stud.fam,"|", stud.name,"|",stud.db,"|",stud.dp,"|", stud.fak,"|",stud.kaf,"|",stud.zach);

	}
	fclose(st);
	cout << "Vvedite nomer studenta s kotorim rabotaem";
	cin >> nomer;
	cout << "4to s nim bedem delat'?"
		 <<	'\n'
		 << "1-vivod ozenok za sessiu"
		 <<	'\n'
		 << "2-ydalit"
		 <<	'\n'
		 << "3-redaktirovat"
		 <<	'\n';
	cin >> nomerdeiy;
	switch (nomerdeiy) {
		case 1: vivodsess(nomer);break;
		case 2: ydal(nomer); break;
		case 3: redak(nomer); break;
	}
	return 0;
}

vvod(){
	zapis();
	st = fopen("stud.dat","a");
	fwrite(&stud, sizeof(struct s), 1, st);
	fclose(st);
	return 0;
}

main(){
	int comanda;
	for (;;) {
		cout << "vvedite nomer comandi: "; cin >> comanda;
		switch(comanda){
			case 1: vvod(); break;
			case 2: vivodspiska(); break;
			case 3: poisk(); break;
			case 4: zadanie(); break;
		}
	}
	return 0;
}
Вообщем проблема в следующем: при считывании записей оценки по сессиям почему то перемешиваются, к примеру сделаем 3 записи в первых 2 ввести какие либо оценки а в 3 ничего и если вывести оценки 2 записи то они там будут в перемешку с оценками 1 записи и если попытаться вывести оценки 3 записи то там будут вперемешку оценки 1 и 2 записи. Данные не вложенных записей читаются нормально( у каждого своё)
Tesmont вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема такова: язык:Delphi7; сохранения файла; загрузка файла в String Grid lightdevil Общие вопросы Delphi 3 06.03.2009 23:10
Баг с чтением из внтуренней памяти процесса. Ivan_32 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 3 13.12.2008 15:22
C++: проблема с чтением строки ф-ей ReadConsole() Retiz Помощь студентам 2 18.09.2008 21:32
Проблема с адресом файла Геля Общие вопросы Delphi 8 20.04.2007 20:48
Помогите с чтением параметра в реестре!! snake-as Общие вопросы Delphi 2 14.03.2007 15:50