Problem mit Texteingabe

Diskutiere Problem mit Texteingabe im C/C++ Forum im Bereich Programmieren unter Linux/Unix; Moin, ich programmiere grade in C++ ein Programm in dem man Profile anlegen kann und stehe noch ziemlich am Anfang :) #include <iostream>...

  1. #1 betaros, 13.08.2010
    betaros

    betaros Computerspezi

    Dabei seit:
    02.02.2008
    Beiträge:
    181
    Zustimmungen:
    0
    Moin,

    ich programmiere grade in C++ ein Programm in dem man Profile anlegen kann und stehe noch ziemlich am Anfang :)

    Code:
    #include <iostream>
    #include <string>
    #include <fstream>
    #include <stdio.h>
    #include <string.h>
    using namespace std;
    
    int menu(int menutype);
    int profiles(int profilemenu);
    
    int main(){
    	int status,menutype = 0;
    	status = menu(menutype);
    	if(status == 1){
    		cout << "Action failed! Maybe wrong Input?" << endl;
    		return 1;	
    	}
    	return 0;
    }
    
    int menu(int menutype){
    	switch(menutype){
    		default: return 1;
    		case 0:
    			int input, status;
    			cout << "Monex 0.01" << endl;
    			cout << "----------" << endl;
    			cout << "1) Create Profile" << endl;
    			cout << "2) Load Profile" << endl;
    			cout << "3) Delete Profile" << endl;
    			cin >> input;
    			status = profiles(input);
    			if(status == 0){
    				cout << "Action was successful!" << endl;
    				return 0;
    			} else {
    				cout << "Action failed! Maybe wrong Input?" << endl;
    				return 1;	
    			}
    		break;
    		}
    		return 1;
    	}
    	
    int profiles(int profilemenu){
    	switch(profilemenu){
    		default: return 1;
    		case 1:
    			ofstream create_profile("1.txt");
    			string correct;
    			do{
    			char fullname[256], address[256], city[256], country[256];
    			cout << "Full Name: ";
    			cin.getline(fullname,256);
    			cout << "Address:   ";
    			cin.getline(address,256);
    			cout << "City:      ";
    			cin.getline(city,256);
    			cout << "Country:   ";
    			cin.getline(country,256);
    			cout << "Sie heißen " << fullname << " und kommen aus " << address << ", " << city << ", " << country << ". Ist das korrekt? (J/N)";
    			cin >> correct;
    			if(correct == "J" || correct == "j"){
    				char buffer[1028];
    				strcat(buffer,fullname);
    				strcat(buffer,":");
    				strcat(buffer,address);
    				strcat(buffer,":");
    				strcat(buffer,city);
    				strcat(buffer,":");
    				strcat(buffer,country);
    				strcat(buffer,"#");
    				cout << buffer << endl;
    				create_profile.write(buffer,1028);
    				create_profile.close();
    				return 0;
    			}}while(correct=="N"||correct=="n");
    		}
    		return 1;
    	}
    
    Mein Problem erkennt man wahrscheinlich bei der Ausführung:
    Code:
    [betaros@Chef ~]$ ./Entwicklung/monex/main 
    Monex 0.01
    ----------
    1) Create Profile
    2) Load Profile
    3) Delete Profile
    1
    Full Name: Address:   Zuhause
    City:      Hier
    Country:   Am Arsch der Welt
    Sie heißen  und kommen aus Zuhause, Hier, Am Arsch der Welt. Ist das korrekt? (J/N)j
    �K:Zuhause:Hier:Am Arsch der Welt#
    Action was successful!
    
    Ich kann Fullname nicht angeben :( Deshalb kommt am Anfang der Ausgabe "�K". Wie kann ich das Problem beheben?

    mfg
    betaros
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #2 marcellus, 13.08.2010
    marcellus

    marcellus Kaiser

    Dabei seit:
    09.05.2007
    Beiträge:
    1.392
    Zustimmungen:
    0
    Code:
    #include <iostream>
    #include <string>
    #include <fstream>
    #include <stdio.h>       [B]// <= solltest du in einem C++ Programm vermeiden, wenns schon sein muss cstdio[/B]
    #include <string.h>      [B]// ditto[/B]
    using namespace std;
    
    int menu(int menutype);
    int profiles(int profilemenu);
    
    int main(){
            int status,menutype = 0;
            status = menu(menutype);
            if(status == 1){
                    cout << "Action failed! Maybe wrong Input?" << endl;
                    return 1;
            }
            return 0;
    }
    
    int menu(int menutype){
            switch(menutype){
                    default: return 1;
                    case 0:
                            int input, status;
                            cout << "Monex 0.01" << endl //die vielen cout kannst du dir sparen
                                   << "----------" << endl;
                            cout << "1) Create Profile" << endl;
                            cout << "2) Load Profile" << endl;
                            cout << "3) Delete Profile" << endl;
                          [B]  //input ist ein int, das '\n' bleibt im stdin[/B]
                            cin >> input;
                            status = profiles(input);
                            if(status == 0){
                                    cout << "Action was successful!" << endl;
                                    return 0;
                            } else {
                                    cout << "Action failed! Maybe wrong Input?" << endl;
                                    return 1;
                            }
                    break;
                    }
                    return 1;
            }
    
    int profiles(int profilemenu){
            switch(profilemenu){
                    default: return 1;
                    case 1:
                            ofstream create_profile("1.txt");
                            string correct;
                            do{
                            char fullname[256], address[256], city[256], country[256];
                            cout << "Full Name: ";
                            [B]//das \n von input wird eingelesen[/B]
                            cin.getline(fullname,256);
                           [B] // fullname ist 256 gross, du brauchst platz für das '\0'
                            // ein C++ string wär da natürlich schöner[/B]
                            cout << "Address:   ";
                            cin.getline(address,256);
                            cout << "City:      ";
                            cin.getline(city,256);
                            cout << "Country:   ";
                            cin.getline(country,256);
                            cout << "Sie heissen " << fullname << " und kommen aus " << address << ", " << city << ", " << country << ". Ist das korrekt? (J/N)";
                            cin >> correct;
                          [B]  //bei sowas match immer auf 'j', nicht auf "j", "j" ist ein null terminierter string, 'j' ist der platz der ansi tabelle an der 'j' steht[/B]
                            if(correct == "J" || correct == "j"){
                                    char buffer[1028];
                                    strcat(buffer,fullname);
                                    strcat(buffer,":");
                                    strcat(buffer,address);
                                    strcat(buffer,":");
                                    strcat(buffer,city);
                                    strcat(buffer,":");
                                    strcat(buffer,country);
                                    strcat(buffer,"#");
                                    cout << buffer << endl;
                                    create_profile.write(buffer,1028);
                                    create_profile.close();
                                    return 0;
                            }}while(correct=="N"||correct=="n");
                    }
                    return 1;
            }
    
    Ich war jetzt nicht motiviert das ganze selber zu kompilieren, ich hoff aber doch das die kommentare dir weiterhelfen.
     
  4. #3 betaros, 13.08.2010
    betaros

    betaros Computerspezi

    Dabei seit:
    02.02.2008
    Beiträge:
    181
    Zustimmungen:
    0
    Vielen Dank für die schnelle Hilfe :)
    nun habe jetzt die Bibliotheken am anfang geändert und bin grade dabei aus
    Code:
    cin >> input;
    status = profiles(input);
    
    ein
    Code:
    cin >> s_input;
    input = atoi(s_input.c_str);
    status = profiles(input);
    zu machen, wobei s_input ein String ist. Beim kompilieren, sagt er mir dann folgendes:
    Code:
    main.cpp:34:30: Fehler: Argument des Typs »const char* (std::basic_string<char>::)()const« passt nicht zu »const char*«
    Habe ich dich vielleicht auch nur falsch verstanden?

    betaros
     
  5. #4 marcellus, 13.08.2010
    marcellus

    marcellus Kaiser

    Dabei seit:
    09.05.2007
    Beiträge:
    1.392
    Zustimmungen:
    0
    strin::c_str() ist eine funktion, das was du probierst ist vermutlich

    Code:
    input = atoi(s_input.c_str());
    Es spricht eh nichts dagegen ein int einzulesen, nur du solltest zb

    Code:
    cin >> input;
    cin.ignore(1, '\n')
    machen, das du das '\n' aus dem buffer rausbekommst.

    Die Anmerkung mit den Strings war eher auf deine char arrays bezogen, hässlich sowas :oldman
     
  6. #5 betaros, 13.08.2010
    Zuletzt bearbeitet: 13.08.2010
    betaros

    betaros Computerspezi

    Dabei seit:
    02.02.2008
    Beiträge:
    181
    Zustimmungen:
    0
    Nochmal vielen Dank! Jetzt ist das Problem verschwunden :)

    Ich habe jetzt aus den chars strings gebaut und wieder ein Problem: create_profile.write() benötigt chars (deshalb diese char Lösung) Da ich aber nur Strings habe, gibt er mir natürlich Fehler. Wenn du du mir das auch noch machst, bin ich dir unendlich dankbar :D

    betaros

    //Edit:

    Problem gelöst:
    Code:
    int profiles(int profilemenu){
    	switch(profilemenu){
    		default: return 1;
    		case 1:
    			ofstream create_profile("1.txt");
    			string correct;
    			do{
    			string fullname, address, city, country;
    			cout << "Full Name: ";
    			getline(cin,fullname);
    			cout << "Address:   ";
    			getline(cin,address);
    			cout << "City:      ";
    			getline(cin,city);
    			cout << "Country:   ";
    			getline(cin,country);
    			cout << "Sie heißen " << fullname << " und kommen aus " << address << ", " << city << ", " << country << ". Ist das korrekt? (J/N)";
    			cin >> correct;
    			if(correct == "J" || correct == "j"){
    				string buffer = fullname + ":" + address + ":" + city + ":" + country + "#";
    				cout << buffer << endl;
    				const char* c_buffer = buffer.c_str();
    				int l_buffer = buffer.length();
    				create_profile.write(c_buffer,l_buffer);
    				create_profile.close();
    				return 0;
    			}}while(correct=="N"||correct=="n");
    		}
    		return 1;
    	}
    
     
Thema:

Problem mit Texteingabe

Die Seite wird geladen...

Problem mit Texteingabe - Ähnliche Themen

  1. Netzwerkproblem ? , wo ud wie suchen

    Netzwerkproblem ? , wo ud wie suchen: Hallo Folgende Problem: Testserver ist i686 Debian-unstable , auf dem läuft primär der apt-proxy apt-cahcer ng. Zugriff im Moment nur per ssh....
  2. Verständnisproblem Samba / LDAP

    Verständnisproblem Samba / LDAP: Hallo zusammen! Ich habe unter Ubuntu 16.04 einen LDAP und Samba Server aufgesetzt. Diese scheinen auch ordnungsgemäß zu funktionieren, sodaß ich...
  3. nginx+php-fpm problem

    nginx+php-fpm problem: Moin, ich hab hier gerade ein Problem und keine Idee mehr woran es liegt. Ich muss wie schon in der Überschrift erwähnt nginx dazu bringen php...
  4. Problem mit Windows auf Ordner auf dem Linuxsystem zuzugreifen

    Problem mit Windows auf Ordner auf dem Linuxsystem zuzugreifen: Ich mache gerade meine ersten Schritte mit Linux und würde gerne auf Dateien meines Linuxsystems auch mit Windows zugreifen, ich bin am...
  5. Virtualboxproblem

    Virtualboxproblem: Hallo Folgnedes Problem: Ich kann ohne Probleme In Debian-Sid, 64Bit und virtualbox-dkms Unixoide installieren, wenn es sich um eine...