[c++] class string übergeben

AcidR4in

Ensign
Registriert
Juli 2005
Beiträge
175
habe folgendes problem:
muss 2 strings einlesen name und vorname nur geht das nicht bekomm das nicht hin, dass er auch den 2ten mit cin get einließt weiß einer wo das problem liegt?

Code:
#include<iostream>
using namespace std;

class Personenliste {
      char name[40], vorname[40];
      public :
             Personenliste(char[40], char[40]);
             void set(char[40],char [40]);
             void print();
             };
             
     
           Personenliste::Personenliste(char uebergebenername[40], charuebergebenervorname[40]){
                  int i;
                  for(i=0;uebergebenername[i]!= '\0';i++){
                    name[i]=uebergebenername[i];
                      }
                  for(i=0;uebergebenervorname[i]!= '\0';i++){
                    vorname[i]=uebergebenervorname[i];
                      }
              }
              void Personenliste::set(char uebergebenername[40], char uebergebenervorname[40]){
                  int i;
                  for(i=0;uebergebenername[i]!= '\0';i++){
                    name[i]=uebergebenername[i];
                      }
                  for(i=0;uebergebenervorname[i]!= '\0';i++){
                    vorname[i]=uebergebenervorname[i];
                      }
              }
             void Personenliste::print() {
                  cout << "Name: " << name << ", Vorname: " << vorname;
                  }

             
             
int main () {
    char name[40],vorname[40];
    int i;
    cout << " Name: ";
    cin.get(vorname,40);
    cin.get(name,40);
    Personenliste namea(name,vorname);
    cout << endl;
    namea.print();
    
    }
 
nein, erlich gesagt weiß ich nicht mal was das ist bin aber auch noch ziemlicher noob was c++ angeht ich weiß nicht finds komisch weil es liegt anscheinend an den an den zwei cin.get, weil auch ohne classe gehts nicht
 
warum machst du eigentlich cin.get()?
ich hätte eher ein
cin >> einstring;
gemacht.
Außerdem solltest du dir mal fertige Klassen und Funktionen angucken. char[] zu kopieren macht man nicht in einer Schleife, dafür gibts strcpy(...).
Und char[] verwende ich auch nicht so gerne. Aber da kann man anderer Ansicht sein. Ich finde die Klasse string viel schöner.

Und nochwas: Mach vor die Membervariablen char name[40], vorname[40]; doch bitte ein "private:". Ich wusste gar nicht dass das so kompiliert.
mfg
 
Zuletzt bearbeitet:
-)sangai(-xeno schrieb:
bin mir nicht sicher, aber hast du mal nen flush vom einlesepuffer gemacht?

Den Eingabepuffer kann man nicht flushen. Wohin auch -.-'

Was erwartest du dir denn von dem Programm?
Ich bin mir nicht sicher, wie sich da das cin.get verhält. Ich vermute aber sehr stark, nicht so wie du es erwartest.

Soll der Name denn durch Leerzeichen getrennt eingegeben werden?
 
wieso einfach wenns auch mit cin.get geht, habs jetzt mit cin >> array gemacht und es läuft
 
-)sangai(-xeno schrieb:
flushen = leeren...

ein ähnliches problem hatte ich mal vor jahren, da war das die lsg...


Nochmal: Einen Eingabestrom kann man nicht flushen. Flushen heißt spülen, nicht leeren. Das bedeutet, dass der Puffer in sein Zieldevice geschrieben wird. Für die Ausgabe macht das Sinn. Das Zieldevice ist der Bildschirm. Für die Eingabe nicht. Man selbst ist der Abnehmer, der Stream kann schlichtweg nicht geflusht werden. Das Flushen eines Eingabestreams definiert sowohl der C-Standard als auch der C++-Standard als undefinierte Aktion. Wenn man etwas machen muss, dass alle Zeichen im Eingabestrom liest und ignoriert, ist das eigentlich immer ein Programmierfehler. Außerdem arbeitet das Programm dann nicht mehr korrekt, wenn die Eingabe nicht die Tastatur ist.


@Topic: cin.get() liest in den angegebenen Puffer, bis die angegebene Größe erreicht ist, oder ein newline oder ein EndOfFile auttritt. Du hast wahrscheinlich erwartet, dass es nach einem Leerzeichen aufhört. Außerdem wäre ich mir nicht sicher, ob eine Nullterminierung des gelesenen Strings stattfindet.

@Kampfgnom: So wie es oben steht sind sie schon (implizit) private.


Nachtrag: Hab das Verhalten von get nachgeschaut. Es liest Größe -1 Zeichen in den Puffer und terminiert ihn mit 0.Das Trennzeichen ist '\n'. Das wird übrigens nicht aus dem Stream entfernt! D.h. das nächste get schlägt "fehl", weil es sofort wieder auf das '\n' stößt. Get ist nicht für formatierte Eingabe gedacht.
 
Zuletzt bearbeitet:
gut, dann war damals mein problem wohl bei einer seltsamen ausgabe aufgetreten. daher auch die formulierung: "bin mir nicht sicher...", da ich mich zweifellos nicht als c++ crack darstellen will :)
 
Macht ja auch nix :) Leider wird das Flushen von Eingabeströmen in Schulen etc. immerwieder gelehrt und steht auch in so einigen Lehrbüchern. Daher mein Hinweis :)
 
Zurück
Oben