ma[i].vorname == ""; was mach ich falsch?



  • Hallo!

    Ne kleine frage:

    ich will abfragen ob in

    ma[i].vorname
    

    etwas drinn steht.

    .vorname
    

    ist nen char (soweit ich weiss 🙂 )

    Nur irgendwie will er nicht...

    Ich lade aus einer datei in die einzelnen arrays, und wenn ich auslese sagt er mir

    ma[i].vorname == ""
    

    aber das kann ich nicht abfragen... also mit

    if (ma[i].vorname == "")
    

    Was mach ich falsch?

    Danke
    Max



  • Gib doch mal die Typdefinitionen an, dann mußt du nicht raten, was es ist 😉

    Zum Thema:
    char können nur mit anderen char's verglichen werden, aber nicht mit String-Literalen (und char-Konstanten schreibt man mit 'x')
    char* vergleichst du mit strcmp()

    PS: Zum Test, ob du einen Leerstring hast, eignet sich auch:

    if(ma[i].vorname[0]=='\0') cout<<"kein Name gegeben\n";
    

    PPS: Wenn es möglich ist, verwende lieber std::string oder AnsiString statt char*.



  • Hi!

    Ist es denn besser Ansistring anstatt char zu nehmen? is für die schule das programm, und wir haben so nen ultra-programmierer als lehrer 🙂

    Hab dank dir jetzt auch ne lösung:

    if (Ansistring(ma[i].vorname == ""))
    

    Danke
    Max



  • Das ist keine Lösung, sondern ziemlicher Unsinn. Bitte gib mal die Deklaration deiner Klasse (oder struct) an.



  • struct person { char name[20], 
                         vorname[20], 
                         handy[20]; 
                    int  personalnummer, 
                         id; 
                    float gehalt; 
                  } ma[50] ;
    

    Oder is des schwachsinn?

    Gruß
    Max



  • Dagegen ist erstmal nichts zu sagen. Allerdings würde die Verwendung von std::string oder AnsiString statt char* die Arbeit vereinfachen.
    char* vergleicht man mir strcmp. Deine Frage müsste also so lauten.

    if (strcmp(ma[i].vorname,"")==0)
    

    Eine kurze Erläuterung was du da gemacht hast.
    Du vergleichst einen Pointer auf char mit einem leeren Stringliteral, wandelst dann das Ergebnis (true oder false) in einen AnsiString und übergibst diesen String dann an dein if.



  • Noch eine alternative Form

    struct person 
    { 
      AnsiString name, vorname, handy;
      AnsiString personalnummer, id;
      double gehalt;
    };
    
    person ma[50];
    

    AnsiStrings kann man mit == vergleichen. Mit Is_Empty() kann man testen ob der String leer ist. Die Personalnummer und die id sollten eher ein String sein, da man damit ja eigentlich nicht rechnen will und so kein Problem mit führenden Nullen hat.


Log in to reply