user defined funtions

this is my code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
#include <iostream>
#include <fstream>
#include <iomanip>
#include <string>
using namespace std;

const int N=5;
struct RECORD
{
	char Name[15];
	int Age;
	float Gpa;
};
RECORD p[N];

void CopyRecords(string fname, RECORD p[])
{
	fstream f;
	f.open(fname, ios::in);

	for (int i=0; i<N; i++) 
        { 
		f.getline(p[i].Name, 20, '/');
		f>>p[i].Age>>p[i].Gpa;
	}
	f.close();
}
		
void Display(RECORD p[])
{
	
	cout << setw(7) << right << "Name" << setw(18) << "Age" << setw(7) << "GPA" << endl;
	cout << setw(32) << setfill('-') << "" << endl;
	for (int i=0; i<N; i++) 
	{
		cout << setfill(' ');
		cout << left << setw(15) << p[i].Name << setw(10) << right << p[i].Age 
			 << setw(8) << showpoint << fixed << setprecision(1) << p[i].Gpa << endl;
	}
	cout << endl;
}

int AgeAverage(RECORD p[])
{
	float AveAge=0;
	for (int i=0; i<N; i++) 
	{
		AveAge+=p[i].Age;
	}
	return AveAge/=N;
}

float GpaAverage(RECORD p[], float&GpaAve)
{
	GpaAve=0;
	for (int i=0; i<N; i++) 
	{
		GpaAve+=p[i].Gpa;
	}
	return GpaAve/=N;
}

void Disply(float AgeAve, float GpaAve)
{
	cout << "The average age of all students is " <<  AgeAve << endl;
	cout << "The average Gpa of all students is " << showpoint << setprecision(1) << fixed << GpaAve << endl;
}

void Teens(RECORD p[])
{
	cout << "This is the name of all teenagers: ";
	for (int i=0; i<N; i++) 
	{
		if (p[i].Age<20)
			cout << p[i].Name << ", ";
	}
	cout << '\b' << '\b';
	cout << endl;
}

void AboveAgeAve(int AgeAve, RECORD p[])
{
	cout << "This is the name of all students whose age is above average: ";
	for (int i=0; i<N; i++) 
	{
		if (p[i].Age<AgeAve)
			cout << p[i].Name << ", ";
	}
	cout << '\b' << '\b';
	cout << endl;
}

int main()
{
	CopyRecords("data2.txt", p);
	Display(p);
	float AgeAve=AgeAverage(p);
	float GpaAve;
	GpaAverage(p, GpaAve);
	Teens(p);
	AboveAgeAve (AgeAve, p);
	Disply(AgeAve, GpaAve);




	system("pause");
	return 0;
}


here's the output

   Name               Age    GPA
--------------------------------
Martin Smith           22     2.2

Austin Clinton        18     3.1

Johnson               19     2.9

Maggie Jones          23     2.3

Tyler W Brown         16     3.4

This is the name of all teenagers:
Austin Clinton,
Johnson,
Tyler W Brown,
This is the name of all students whose age is above average:
Austin Clinton,
Tyler W Brown,
The average age of all students is 19.0
The average Gpa of all students is 2.8
Press any key to continue . . .


now my questions are 1) why is there a space before the age for martin and 2) why does the names not print on the same line as the "This is the..."?

this is what i would like my output to look like

   Name               Age    GPA
--------------------------------
Martin Smith          22     2.2
Austin Clinton        18     3.1
Johnson               19     2.9
Maggie Jones          23     2.3
Tyler W Brown         16     3.4

This is the name of all teenagers: Austin Clinton, Johnson, Tyler W Brown
This is the name of all students whose age is above average: Austin Clinton, Tyler W Brown
The average age of all students is 19
The average Gpa of all students is 2.8
Press any key to continue . . .


the .txt file looks like this if it helps any
Martin Smith/ 22 2.2
Austin Clinton/18 3.1
Johnson/ 19 2.9
Maggie Jones/ 23 2.3
Tyler W Brown/16 3.4


please keep in mind that is how the professor wanted the .txt file to look like
Get a debugger an observe the content of the names
You'll realize that, except the first, they start with '\n'
Last edited on
I seeee. Cool. Fixed it with f.ignore(). Thanks
Topic archived. No new replies allowed.