DaniWeb IT Discussion Community

DaniWeb IT Discussion Community (http://www.daniweb.com/forums/index.php)
-   C++ (http://www.daniweb.com/forums/forum8.html)
-   -   How to make a choise for the user to choose a file to open? (http://www.daniweb.com/forums/thread132329.html)

Q8iEnG Jul 2nd, 2008 3:03 pm
How to make a choise for the user to choose a file to open?
 
Hi guys :)

I'm working on a project ( a game )

this is the code
#include <iostream>
#include <fstream>
#include <string>
using namespace std;

//####### Begin Class Node ###########
class Node
{
public:
        string data;
        Node* link;

        Node(string x)
        {
                data = x;
                link = NULL;
        }
};

//####### Begin Class LinkList ###########
class LinkList
{
private:
        Node* head,*end,*temp,*trav;
        int count;
        void PrintBack(Node* x)
        {
                if (!x)
                {
                        PrintBack(x->link);
                        cout<<x->data<<"  ";
                }
        }
       
public:

        LinkList()
        {
                head = end = NULL;
                temp = NULL;
                count = 0;
        }

        bool Insert(string x)
        {
                if (!(temp = new Node(x)))
                        return false;

                count++;

                if (!head)
                {
                        head = end = temp;
                        return true;
                }

                end->link = temp;
                end = temp;
                temp = NULL;
                return true;

        }

        bool FindX(string x)
        {
    bool found;
        found = false;

    trav = head; 
                   
    while(trav != NULL && !found)       
        if(trav->data == x)   
          found = true;
        else
          trav = trav->link; 
                                 
   
    return found;
        }

        bool Remove(string &x)
        {
                if (!head)
                        return false;

                if (count == 1)
                {
                        x = head->data;
                        delete head;
                        head = end = NULL;
                        count--;
                        return true;
                }

                x = head->data;
                temp = head;
                head = head->link;
                delete temp; temp = NULL;

                return true;
        }

        bool delX(string x)
        {
                string u;

                if (!head)
                        return false;

                if ( head->data == x)
                {
                        Remove(u);
                        return true;
                }

                for ( temp = head, trav = head->link; trav ; temp = trav,trav = trav->link)
                {
                        if (trav->data == x)
                        {
                                temp->link=trav->link;
                       
                                if(trav==end)
                                        end = temp;

                                delete trav;
                                trav = NULL;

                                return true;
                        }
                }
                return false;
        }

        void PrintLinkList()
        {
                if(!head)
                        cout<<"\nLinkList is Empty ... "<<endl;
                else
                for ( trav = head ; trav ; trav = trav->link)
                {
                        cout<<trav->data<<" ";       
                }
        }

        void PrintBackword()
        {
                temp = head;

                PrintBack(head);
        }


        ~LinkList()
        {
                while(head != NULL)   
                {
                        temp = head;       
                    head = head->link;
                    delete temp;       
                }

                end = head = temp = NULL;       
                count = 0;
       
        }

        void printNode(string &x)
        {
                trav = head;
                x = trav->data;
                trav=trav->link;
        }

        int counter()
        {
                return count;
        }

};

//####### Begin Function Main ###########
int main()
{
        string A[5000];
        string x;
        string p;
        int choose;
        LinkList lib; // Creating Object from the class LinkList

        cout << "Choose Which file you want to try the game on?\n";
        cout << "1 - madlib1.txt\n";
        cout << "2 - madlip2.txt\n";
        cin >> choose;


        // Switch loop to choose more than one file to play *FOR THE BONUS* xD
        switch( choose )
        {
        case 1:
                // Constructor that opens the file
                ifstream fin("madlip1.txt");

                // If statement to check if the file can be opened or not.
                if( !fin )
                {
                        cerr << "\nError, Can't open the File.!\n";
                        exit(1);

                } // end if statement
       
        break; // to exit switch

        case 2:
                // Constructor that opens the file
                ifstream fin("madlip2.txt");

                // If statement to check if the file can be opened or not.
                if( !fin )
                {
                        cerr << "\nError, Can't open the File.!\n";
                        exit(1);

                } // end if statement

                break; // to exit switch loop

        } // end switch

        int i =0; // Initiate this variable for the use of the array.

        // While Loop to read the File, and save the content in the array
        while( fin>>x )
        {
                A[i] = x;
                i++;
        }

        // For Loop to insert the Keywords to the LinkList.
        for( int j = 0; j < i; j++ )
        {
                if (A[j] == "adjective")
                        lib.Insert("Adjective");
               
                if (A[j] == "verb")
                        lib.Insert("Verb");

                if (A[j] == "name")
                        lib.Insert("Noun");

                if (A[j] == "adverb")
                        lib.Insert("Adverb");
        }

        int y = lib.counter();

        while (y != 0)
        {
                cout<<"Enter an ";
                lib.printNode(x);
                cout<<x;
                cout<<" ";
                lib.Remove(x);
                cin>>p;
                lib.Insert(p);
                cout<<endl;
       
                y--; // Decrement y until we finish from all the Keywords, to reach 0.

        }

        // For loop to replace each Keyword with the suitable word from the user.
        for(int r = 0; r < i; r++)
        {
                if (A[r] == "adjective")
                {
                        lib.printNode(x);
                        A[r] = x;
                        lib.Remove(x);
                }
               
                if (A[r] == "verb")
                {
                        lib.printNode(x);
                        A[r] = x;
                        lib.Remove(x);
                }

                if (A[r] == "name")
                {
                        lib.printNode(x);
                        A[r] = x;
                        lib.Remove(x);
                }

                if (A[r] == "adverb")
                {
                        lib.printNode(x);
                        A[r] = x;
                        lib.Remove(x);
                }
        }
       
        // For loop to output the new updated paragraph
        for(int k = 0; k < i ; k++)
        {
                if(A[k] =="!")
                        cout<<"\n\n\n";
               
                cout<<A[k]<<" ";
        }
       

        return 0; // To indicate successfully termination

}
//####### End Function Main ###########

See the MAIN

I did tried Switch Loop but it doesn't work

Any good Plans? :/ it'll be appreciated :)

Q8iEnG Jul 2nd, 2008 4:22 pm
Re: How to make a choise for the user to choose a file to open?
 
I tried also If statement, but with no success :'(!!

What should I do, any suggestions?

thanks :)

William Hemsworth Jul 2nd, 2008 4:41 pm
Re: How to make a choise for the user to choose a file to open?
 
The variable fin is destructed before you use it. For this to work you would have to arrange it slightly differently.

switch( choose )
        {
        case 1:
                // Constructor that opens the file
                ifstream fin("madlip1.txt");

                // If statement to check if the file can be opened or not.
                if( !fin )
                {
                        cerr << "\nError, Can't open the File.!\n";
                        exit(1);

                } // end if statement
       
        break; // to exit switch

        case 2:
                // Constructor that opens the file
                ifstream fin("madlip2.txt");

                // If statement to check if the file can be opened or not.
                if( !fin )
                {
                        cerr << "\nError, Can't open the File.!\n";
                        exit(1);

                } // end if statement

                break; // to exit switch loop

        } // end switch

        int i =0; // Initiate this variable for the use of the array.

        // While Loop to read the File, and save the content in the array


        // Too late, its already been destructed
        while( fin>>x )
        {
                A[i] = x;
                i++;
        }

for this to work, construct the variable fin before the switch statement and open the file like this:
fin.open("....");

dwks Jul 2nd, 2008 5:18 pm
Re: How to make a choise for the user to choose a file to open?
 
In order to use the ifstream fin variable that you declare inside the switch statement, you need to declare it outside the switch statement. For example:
ifstream fin;
switch(choose) {
case 1:
    fin.open("whatever.txt");
    // ...
}

while(fin >> whatever) // ...

[edit] Wow, I was beaten by over half an hour. Sorry.

Just one other thing to add: why not let the user enter the name of the file themselves? That way you don't have to worry about the switch statement or anything . . . . [/edit]

Q8iEnG Jul 3rd, 2008 7:37 am
Re: How to make a choise for the user to choose a file to open?
 
Well, thanks a lot for trying to help

I just did create a function, and I implement all things in main into it, so that when the user choose 1, from a switch loop in main, it'll call the function xD

thanks :)


All times are GMT -4. The time now is 11:10 pm.

Forum system based on vBulletin Copyright ©2000 - 2009, Jelsoft Enterprises Ltd.
©2003 - 2009 DaniWeb® LLC