Problem mit Characters



  • Eigentlich ist der Teil des Programms total simpel. So sollte es sein, ist es aber nicht. Ich benutze DEV-C++, die neueste Version.

    Ich will, das der User seinen Namen und seinen Vornamen hintereinander weg eingibt.
    Anschließend soll der Vorname + Name unten drunter ausgegeben werden. Die Wörter will ich in ein!!! Array packen.
    Doch leider stürzt das Programm zur Laufzeit ab, wenn es den Text ausgeben soll.

    Achja, zu erwähnen wäre noch, das dass Array in einem Header ist.

    Wie würdet ihr das lösen? Ist mir eigentlich peinlich sowas billiges zu fragen, da ich es ja schonmal hinbekommen hatte. 🤡



  • Vielleicht solltest du noch posten, was du geschrieben hast. Sonst müssen wieder die Kristallkugelbesitzer kommen. 😃 Meine ist noch nicht gekommen. 🤡



  • Ja, tschuldigung...ich selber schwafel immer davon, den Code hinzuschreiben und bin selber nicht besser. *schäm*

    Also, ich hab das jetzt hinbekommen mittels scanf. Ursprünglich wollte ich das über cin machen.

    Der Header:

    #ifndef VARIABLEN_H
    #define VARIABLEN_H
    
    static int auswahl;
    static char username[100];
    
    #endif
    

    Die cpp:

    #include <iostream>
    #include <string>
    #include <stdlib.h>
    #include "funktionen.h"
    #include "variablen.h"
    
    using namespace std;
    
    void newgame()
     {
      cout << "# #" << endl;
      cout << "###############" << endl;
      cout << "# Neues Spiel #" << endl;
      cout << "###############" << endl;
      cout << "# #" << endl;
      cout << "# ### Spielername: "; cin >> username;
      printf(username);
     }
    

    Mittlerweile hab ich das cin ausgetauscht durch scanf. Da funktioniert es.
    Aber es müsste doch auch mit cin gehen.



  • cin liest nur bis zum ersten Leerzeichen. Probier doch mal getline aus.

    also:

    cin.getline(username, 100);
    

    Hab's grad getestet, geht bei mir so:

    cout << "# #" << endl;
      cout << "###############" << endl;
      cout << "# Neues Spiel #" << endl;
      cout << "###############" << endl;
      cout << "# #" << endl;
      cout << "# ### Spielername: "; cin.getline(username, 100);
      cout << username;
    


  • Also, bei mir gibt er keine Fehlermeldung aus, aber es erfüllt nicht seine Aufgabe. Der wartet garnicht auf die Eingabe einer Zeichenkette.

    Liegt das vielleicht daran, das ich das Array Username in einem Header hab?



  • nein, daran liegt es nicht. aber probier mal:

    getline(cin,username);



  • Da hab ich jedenfalls eine Fehlermeldung...^^

    20 C:\Programme\Programmieren\Dev-Cpp\Projects\use\Tamagochi\newgame.cpp
    no matching function for call to `getline(std::istream&,
    

    und er markiert getline(cin,username);



  • getline(cin, username) funktioniert nur, wenn username ein std::string ist.

    Nimm für char Arrays cin.getline(username, 100) wie ich oben schon gesagt hab.



  • okay...da gibt er zwar keine Fehlermeldung aus, aber das ich den Namen da reinschreiben kann, lässt er aus(wieso eigentlich er Oo).

    Also, ich weiß nicht, was ich ändern könnte, damit es funktioniert... hoffe ihr habt eine Antwort darauf...mich wundert es ja selber, das es nicht geht, zumal ich es schön öfters benutzt und auch hinbekommen hab.



  • Okay, da mein Problem immer noch nicht gelöst ist, und ich aber weiterkommen möchte, stell ich einfach mal das bisherige Programm hier hinein. Vielleicht findet ja jemand den Fehler. Ich habs aufgegeben. Es soll ein Tamagochi werden.

    ###########HEADER#############
    funktionen.h

    #ifndef FUNKTIONEN_H
    #define FUNKTIONEN_H
    
    void start();//die erste Funktion die geladen wird. Enthält Authordaten
    void smenu();//Startmenu, nicht das Spielmenu
    void newgame();//Startet ein neues Spiel
    void loadgame();//lädt ein neues Spiel
    void takeani();//Tierauswahl
    
    #endif
    

    variablen.h

    #ifndef VARIABLEN_H
    #define VARIABLEN_H
    
    static int auswahl;
    static char username[101];
    static int tier;
    
    #endif
    

    ################CPP#######################
    main.cpp

    #include <iostream>
    #include <string>
    #include <stdlib.h>
    #include "funktionen.h"
    //#include "variablen.h"
    
    using namespace std;
    
    int main(int argc, char *argv[])
    {
      start();
      system("PAUSE");	
      return 0;
    }
    

    start.cpp

    //start.cpp
    //Hat keine berechnende Funktion, sondern lediglich eine designtechnische Notwenidkeit
    #include <iostream>
    #include <string>
    #include <stdlib.h>
    #include "funktionen.h"
    #include "variablen.h"
    
    using namespace std;
    
    void start()
     {
     cout << "#####################################################" << endl;
     cout << "# Tamagochi - Programmiert von Takeo fuer Bionic-17 #" << endl;
     cout << "#####################################################" << endl;
     cout << "# #" << endl;
     smenu();
     }
    

    smenu.cpp

    #include <iostream>
    #include <string>
    #include <stdlib.h>
    #include "funktionen.h"
    #include "variablen.h"
    
    using namespace std;
    
    void smenu()
     {
      cout << "# #" << endl;
      cout << "#############" << endl;
      cout << "# Startmenu #" << endl;
      cout << "#############" << endl;
      cout << "# #" << endl;
      cout << "# ### Neues Spiel - 1" << endl;
      cout << "# #" << endl;
      cout << "# ### Spiel laden - 2" << endl;
      cout << "# #" << endl;
      cout << "# ### Beenden     - 3" << endl;
      cout << "# #" << endl;
      cout << "# #------------------" << endl;
      cout << "# #=>"; cin >> auswahl;
      cout << "# #" << endl;
      cout << "# #" << endl;
    
      switch(auswahl)
       {
        case 1://Neues Spiel
               newgame();
               break;
    
        case 2://Spiel laden
               loadgame();
               break;
    
        case 3://Beenden
               break;
    
        default://wenn unbekannte Eingabe
                smenu();
                break;
       } 
     }
    

    newgame.cpp (hier trat der Fehler auf)

    #include <iostream>
    #include <string>
    #include <stdlib.h>
    #include <stdio.h>
    #include <stdarg.h>
    #include "funktionen.h"
    #include "variablen.h"
    
    using namespace std;
    
    void newgame()
     {
      cout << "# #" << endl;
      cout << "###############" << endl;
      cout << "# Neues Spiel #" << endl;
      cout << "###############" << endl;
      cout << "# #" << endl;
      cout << "# ### Name: "; cin.getline(username, 100); //scanf("%s", &vorname);
      cout << "# #" << endl;
      takeani();
      cout << username << endl;
      //printf(vorname); cout << " "; printf(nachname);
     }
    

    takeani.cpp

    #include <iostream>
    #include <string>
    #include <stdlib.h>
    #include "funktionen.h"
    #include "variablen.h"
    
    using namespace std;
    
    void takeani()
     {
     cout << "# #== Welches Tier moechtest du?" << endl;
     cout << "# #" << endl;
     cout << "# ### Hamster - 1" << endl;
     cout << "# #" << endl;
     cout << "# ### Hund    - 2" << endl;
     cout << "# #" << endl;
     cout << "# ### Katze   - 3" << endl;
     cout << "# #" << endl;
     cout << "# #--------------" << endl;
     cout << "# #=>"; cin >> tier;
     cout << "# #" << endl;
     }
    

    ######################################################################

    So! Das waren jetzt alle Dateien. Ich hoffe das bringt was. Bitte bitte helft mir. Das ist so verzwickt. Denkt dran, das ich DEV-C++ 4.9.8.0 benutze.

    Ein großes Dankeschön schon im Voraus. DANKE!!!



  • hi! Benutz std::string, keine char-Arrays. char-Arrays sind C, und du schreibst schliesslich C++ und nicht C.

    string mein_name;
    getline(cin, mein_name);
    

    sollte alles sein, was du brauchst.



  • Ich habe endlich das Problem lösen können, dank Wirrwar 2850.

    Die Variablen(Array) müssen einfach über den Konstruktor deklariert werden und muss die Zuweisung NULL bekommen. Dann geht es.

    Danke an alle die sich mit dem Thema auseinander gesetzt haben.


Anmelden zum Antworten