Средний Бал По 4 Предметам

13.04.2012
12
0
#1
Всем привет. Помогите пожалуйста найти средний бал по предметам и если средний бал больше 7 то сохранить в файл, а то чета я вообще не могу.

Вот код проги:

C++:
#include <iostream.h>
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
#include <fstream.h>


FILE *fl;

typedef struct
{
char fio[30];
unsigned char matem;
unsigned char oaip;
unsigned char english;
}TStudent;

TStudent stud[30]; //массив структур
char name[20];//имя файла
int nst=0;//число введенных структур

int menu();	//меню
void spisok(); //Ввести список
void resc();  //Вывести результат на экран
void resf();  //Сохранить результат в файл



int main()
{
while (true)
{
switch (menu())
{

case 1: spisok(); break; //Ввести список
case 2: resc(); break; //Вывести результат на экран
case 3: resf(); break; //Сохранить результат в файл

case 4: return 0;
default: "Viberite pravilno!";
}
puts("pres any key to continue");
getch();
system("cls"); 
}
} 


int menu()//меню
{
cout<<"viberite:"<<endl;
cout<<"1.vvod studentov"<<endl;
cout<<"2.vivesti rezultat na ekran"<<endl;
cout<<"3.sohranit rezultat v file"<<endl;
cout<<"4.Exit"<<endl;
int i;
cin>>i;
return i;
}





void resc()//вывести результат на экран
{
char fio[30];
unsigned char matem;
unsigned char oaip;
unsigned char english;

ifstream fin("ofile.txt", ios::in);

fin.getline(fio, 30);
fin >> matem >> oaip >> english;
fin.ignore(2);

while(!fin.eof()){

cout << fio << '\n' << matem << '\n' << oaip << '\n' << english << "\n\n";

fin.getline(fio, 30);
fin >> matem >> oaip >> english;
fin.ignore(2);
}

fin.close();
system("pause");
}



void spisok () //ввести список
{

cout<<"vvedite chislo studentov"<<endl;
cin>>nst;

for (int i=0;i<nst;i++)
{
cout<<"vvedite imya: ";
cin>>stud[i].fio;
cout<<"vvedite ocenki po matem.: ";
cin>>stud[i].matem;
cout<<"vvedite ocenku po oaip: ";
cin>>stud[i].oaip;
cout<<"vvedite ocenku po english: ";
cin>>stud[i].english;

}

}


void resf()////сохранение в файл
{
ofstream fout("ofile.txt", ios::app);
for (int i=0;i<2;i++)
{
fout << stud[i].fio << endl << stud[i].english << endl
<< stud[i].matem << endl << stud[i].oaip << endl << endl;
}
}
 
13.04.2012
12
0
#2
Вот мой код, все вроде правильно, пробегаюсь по файлу и если средний бал >6 то вывести этого человека, но что-то его не выводит.
Подскажите пж в чем проблемка.

C++:
void resc() //Вывод на экран
{
char fio[30];
int matem;
int oaip;
int english;
double srb;


ifstream fin("ofile.txt", ios::in);

fin.getline(fio, 30);
fin >> matem >> oaip >> english>>srb;
fin.ignore(1);

//while(!fin.eof())




for (int i=0;i<nst;i++)
{
if(stud[i].srb > '6')



cout << fio << '\n' << matem << '\n' << oaip << '\n' << english << '\n'<< srb << "\n\n"; 

fin.getline(fio, 30);
fin >> matem >> oaip >> english>>srb;
fin.ignore(1);


fin.close();
system("pause");
}}
 
13.04.2012
12
0
#3
пробую писать
C++:
if(srb > '6')
но всеравно не хочет, подскажите пж в чем проблема.
 
13.04.2012
12
0
#4
пробую так:
C++:
void resc() //na ekran
{
char fio[30];
double matem;
double oaip;
double english;
double srb;


ifstream fin("ofile.txt", ios::in);

fin.getline(fio, 30);
fin >> matem >> oaip >> english>>srb;
fin.ignore(1);

//while(!fin.eof())




for (int i=0;i<nst;i++)
{
if(srb >= 6.0)



cout << fio << '\n' << matem << '\n' << oaip << '\n' << english << '\n'<< srb << "\n\n"; 


fin.getline(fio, 30);
fin >> matem >> oaip >> english>>srb;
fin.ignore(1);


fin.close();
system("pause");
}}
но выводит только 1 человека и только 1 раз, при следующем запуске не выводит.
 
R

rrrFer

#5
чето все не так

Код:
char fio[30];
double matem;
double oaip;
double english;
double srb;
удобно использовать структуру

Код:
fin >> matem >> oaip >> english>>srb;
в файле дана информация по 4 предметам ведь, почему ты оттуда средний бал считываешь? - его нада посчитать

Код:
fin.ignore(1);
зачем это?

Код:
for (int i=0;i<nst;i++)
откуда ты вобще nst взял ? считывай с файла пока он не кончится

Код:
fin >> matem >> oaip >> english>>srb;
эта штука стоит перед циклом, а значит, ты надеешься что в фале есть как минимум одна запись, это тоже неверно