Troubles with ifstream

I am not able to get my program to pull the neg/pos/nut effects out of file. I named the notepad file objects.txt and still nothing. any ideas as to why?
PS: learning this from youtube. video is
"Buckys C++ Programming Tutorials - 68 - Cool Program Working with Files"

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
#include <iostream>
#include <fstream>
using namespace std;

int getWhatTheyWant();
void displayItems(int x);

//main function
int main()
{
    int whatTheyWant;

    whatTheyWant = getWhatTheyWant();

    while(whatTheyWant != 4)
    {
        switch(whatTheyWant){
    case 1:
        displayItems(1);
        break;
        case 2:
        displayItems(2);
        break;
        case 3:
        displayItems(3);
        break;
        }
        whatTheyWant = getWhatTheyWant();
    }
}
// getwhattheywant function
int getWhatTheyWant(){
    int choice;

    cout << "1 - just plain items" << endl;
    cout << "2 - helpful items" << endl;
    cout << "3 - harmful items" << endl;
    cout << "4 - quit program" << endl;

    cin >> choice;
    return choice;

}
//display items function
void displayItems(int x){

    ifstream objectFile("objects.txt");
    string name;
    double power;

    if(x==1){
        while(objectFile >> name >> power){
            if(power==0){
                cout << name << ' ' << power << endl;
            }
        }
    }
    if(x==2){
        while(objectFile >> name >> power){
            if(power>0){
                cout << name << ' ' << power << endl;
            }
        }
    }
    if(x==3){
        while(objectFile >> name >> power){
            if(power<0){
                cout << name << ' ' << power << endl;
            }
        }
    }

}
You should check if the file actually opened. Put this after the ifstream line (line 47 above):

1
2
3
4
if (!objectFile){
    cerr << "Cannot open input file.\n";
    exit(1);  // should include <cstdlib> for exit function
}

Last edited on
Note that main() can be simplified. Consider:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
nt main()
{
	while (true)
		switch (getWhatTheyWant()) {
			case 1:
				displayItems(1);
				break;

			case 2:
				displayItems(2);
				break;

			case 3:
				displayItems(3);
				break;

			case 4:
				return 0;

			default:
				cout << "Invalid option\n";
				break;
		}
}

"objects.txt" is a relative file path. It is relative to the working directory of the process which might not be the same as the directory where your executable is located if you run the program from the IDE or from the command line.
Topic archived. No new replies allowed.