c++ program begginer

Write your question here.
hello everyone. i been having problems with my code and i was hoping you guys could help me. this is the assigment

"Write a C++ program to open a string data file, read the data from that file, and assign them to an array. Then your program sorts these data either in ascending or descending order depending on the user’s choice. Finally, the sorted data will be stored in a data file as well as shown on the screen."

this is what i got so far, however i not sure whats wrong since it doesnt execute properly. Thanks your help!
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
 #include <iostream>
#include<string>
#include<fstream>
using namespace std;

void swap (string& name1, string& name2);
void getData (string name[], int& item);
void ascending (string name [], int item );
void ascending (string name [], int item );
void descending (string name[], int item);
void output (string name [], int item);
int getChoice();


int main() 
{

	string name [1000];
	int item, choice;

	getData (name, item);
	choice = getChoice();

	if (choice==1)
		ascending (name, item);
	if (choice ==2)
		descending (name, item);
	output (name, item);

	

}

void swap (string& name1, string& name2)
{
	string temp;
	temp = name1;
	name1 = name2;
	name2 = temp;
}


void getData (string name[], int& item)
{
	ifstream fin;
	fin.open("C:\\Users\arroyo99\Desktop\example.txt");
		item = 0;
	while (!fin.eof())
	{
		fin>> name[item];
		item++;
	}
	cout << "item =" << item << endl<<endl;

}

void ascending (string name [], int item )
{
	for (int j=0; j<item-1; j++)
	{
		for (int i=0; i<item-1; i++)
			if(name[i] >name [i+1])
				swap(name[i], name[i+1]);
	}
}

void descending (string name[], int item)
{
	string temp;
	for (int j=0; j <item-1; j++)
	{
		for (int i=0; i<item-1; i++)
			if (name[i]<name[i+1])
				swap(name[i], name [i+1]);
	}
}

void output (string name [], int item)
{
	for (int i=0; i<item; i++)
		cout<<name[i]<< endl;
	cout<<endl<<endl;
}

int getChoice()
{
	int choice;
	cout<< "Please enter 1 for ascending or 2 for decending." <<endl;
	cin>>choice;
	return choice;
}
Last edited on
What do you mean by "it doesnt execute properly"?

Do you get compile errors?


Please post a small sample of your input file.

i dont get errors its just that nothing happens. it doesnt ask me for options or nothing. my guest would be that the program is not reading the input file.

as for the sample text. its just a list of names.
Ex.
Sergio
richard
steve
john
...etc.
This line looks wrong:
fin.open("C:\\Users\arroyo99\Desktop\example.txt");
the single "\" indicates an escape sequence. You need "\\" to represent an actual \ character.
fin.open("C:\\Users\\arroyo99\\Desktop\\example.txt");

No need to guess whether or not the program is reading the file.
After opening it, check that it was successful:
1
2
3
4
5
    if (!fin.is_open())
    {
        cout << "Error: file not open" << endl;
        return;
    }



Also, don't test for eof. Do it this way instead:
1
2
3
    int item = 0;
    while (fin >> name[item])
        item++;


Last edited on
Thank you so much, that fix my program.

also if i assign gpa and student id to each name, how would i sort the file by gpa or id #?
When you talk of assigning something to each name, I think you mean there are effectively three items of data on each line.

Thus you need to consider how to store these items. A 2-dimensional array is one way, but that could get messy, as you have to keep everything synchronised.

Ot you could store the data in a structure, roughly like this:
1
2
3
4
5
struct student {
    string name;
    string gpa;
    int id;
};

Whether to use string or int or other type is up to you. This way you only need a single array of student objects.

The overall logic when sorting will be much the same, but you need need to compare the required values.


Topic archived. No new replies allowed.