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