Frage zu argv



  • Hi all,

    hier mein Sourcecode (öfnnet eine Datei zum Lesen oder schreiben)). Wenn ich allerdings als Parameter -w test.txt angebe, schließt das Programm einfach. Wie kann dies sein?

    #include <iostream>
    #include <fstream>
    #include <string>
    
    using namespace std;
    
    int main (int argc, char *argv[])
    {
    	if(argc != 3)
    	{
    		cout << "FAIL. Usage: ./filereader -r/w file" << "\n";
    	}
    	else if(argv[1] == "-w")
    	{
            ofstream f1(argv[2]);
    	    if(!(f1.is_open()))
    	    {
    	        cerr << "Konnte Datei " << argv[1] << " nicht öffnen." << "\n";
    
            }
            cout << "Opened in write mode. Your Text here. Type \"cancel\" to abort!\n";
            string s;
            while(true)
            {
                 cin >> s;
                if(s != "cancel")
                {
                    break;
                }
                f1 << s << "\n";
            }
    
    	}
    	else if(argv[1] == "-r")
    	{
            ifstream f1(argv[2]);
    	    if(!(f1.is_open()))
    	    {
    	        cerr << "Konnte Datei " << argv[1] << " nicht öffnen." << "\n";
                return 0;
            }
            cout << "Opened in read mode. Will know show you the contents\n";
            char s[512];
            while(f1.getline(s, sizeof(s)))
            {
               cout << s;
            }
    
    	}
    	else
    	{
    		cout << "FAIL. Usage: ./filereader -r/w file" << "\n";
    	}
    
    cin.get();
    return 0;
    }
    


  • um zwei char strings miteinander zu vergleichen musst du strcmp benutzen aus cstring



  • string(argv[1]) == "-w" dürfte es auch tun. Und deine Überprüfung auf "cancel" ist irgendwie falsch, oder soll es nur zugelassen sein, dass "cancel" in die Datei geschrieben werden kann? 😉
    Zudem gibt es ein getline auch für strings und streams.

    #include <iostream>
    #include <fstream>
    #include <string>
    
    using namespace std;
    
    int main(int argc, char *argv[])
    {
    	if (argc != 3) {
    		cerr << "FAIL. Usage: " << argv[0] << " -r/w file" << endl;
    		return -1;
    	}
    
    	if (string(argv[1]) == "-w") {
    		ofstream f1(argv[2]);
    
    		if (!f1.is_open()) {
    			cerr << "Konnte Datei " << argv[2] << " nicht öffnen." << endl;
    			return -2;
    		}
    
    		cout << "Opened in write mode. Your Text here. Type \"cancel\" to abort!" << endl;
    
    		string s;
    		while (true) {
    			getline(cin, s);
    			if(s == "cancel")
    				break;
    			f1 << s << "\n";
    		}
    	} else if (string(argv[1]) == "-r") {
    		ifstream f1(argv[2]);
    
    		if (!f1.is_open()) {
    			cerr << "Konnte Datei " << argv[2] << " nicht öffnen." << endl;
    			return -2;
    		}
    
    		cout << "Opened in read mode. Will now show you the contents." << endl;
    
    		string s;
    		while (getline(f1, s))
    			cout << s << "\n";
    	} else {
    		cerr << "FAIL. Usage: " << argv[0] << " -r/w file" << endl;
    		return -1;
    	}
    
    	return 0;
    }
    


  • Oh f*ck ja, ich war sehr sehr müde gestern Abend um 3 🙂


Anmelden zum Antworten