Problem:for-Schleife mit if und else-Anweisung



  • Schreibe z.Z. an einem Programm, dass eine Datei (Liste mit Namen und Adressen) einlesen soll.
    Dann kann der Nutzer einen Namen eingeben und das Programm soll den Namen mit der Liste vergleichen und dann den Namen mit Adresse ausgeben.
    Wenn der Name nicht vorhanden ist soll eine Meldung gebracht werden und die gesamte Liste sortiert (aber nur die Namen und Vornamen) ausgegeben werden.
    Im Prinzip hab ich die Aufgabe gelöst. Bei mir hapert es nur an der Ausgabe.
    Mein Problem:
    Das Programm gibt bei mir alle beiden Varianten auf einmal aus d.h. ich habe eine FOR-Schleife benutzt - dann werden die Namen verglichen. In der FOR-Schleife kommt dann meine IF und ELSE - Anweisung. Das ist das Problem: Das Programm führt, wegen der Schleife, die IF und die ELSE-Anweisung aus. Ist mir ja auch logisch. Bei den Namen, die nicht gesucht werden springt er in die else-Anweisung und gibt Namen und Vornamen aus und für den Namen der gesucht dann zusätzlich die Adresse (if-Anweisung). Wenn ich die Schleife dann aber an der Stelle abbreche, vergleicht er ja nicht alle Namen (es sind auch Namen doppelt). Wie kann ich das Problem am einfachsten lösen d.h. ohne große C++-Kenntnisse (bin Anfänger)? 😕

    DANKE



  • Zeig mal die schleife mit der IF und ELSE bedingung



  • for (i=0;i<Satzmax;i++)
    {
    char *Name1=(Edit1->Text.c_str());
    char *Name2=k1[i].Name;
    int ptr;
    ptr=strcmpi(Name1,Name2);
    
    if
    (ptr==0)
    
    {
     strcpy(a,"");
     strcat(a,k1[i].Name);
     auffuellen(a,strlen(k1[i].Name));
     strcat(a,k1[i].Vorname);
     auffuellen(a,strlen(k1[i].Vorname));
     strcat(a,k1[i].Strasse);
     auffuellen(a,strlen(k1[i].Strasse));
     strcat(a,k1[i].Ort);
     auffuellen(a,strlen(k1[i].Ort));
     strcat(a,k1[i].PLZ);
    
     ListBox1->Items->Add(AnsiString(a));
    }
    else
    {
    strcpy(a,"");
    strcat(a,k1[i].Name);
    auffuellen(a,strlen(k1[i].Name));
    strcat(a,k1[i].Vorname);
    auffuellen(a,strlen(k1[i].Vorname));
    ListBox1->Items->Add(AnsiString(a));
    }
    }
    


  • Du durchsuchst zuerst die Liste nach dem Namen, ohne irgendwas auszugeben, und merkst dir das Ergebnis. Dann setzt du hinter die Schleife einen if-else-Block, der im if-Teil den gefundenen Namen ausgibt. Im else-Block machst du nochmal eine Schleife, die die ganze Liste ausgibt.


Anmelden zum Antworten