Troubles with ifstream
Jan 18, 2021 at 7:29pm UTC
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;
}
}
}
}
Jan 18, 2021 at 8:19pm UTC
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 Jan 18, 2021 at 8:21pm UTC
Jan 19, 2021 at 9:38am UTC
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 ;
}
}
Jan 19, 2021 at 9:54am UTC
"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.