Brauche Hilfe Programm funktioniert nicht mehr!!!



  • Ich hab eine Funktionen geschrieben aber ich finde einfach den Fehler nicht ich glaube das es mit dem strstr nicht so ganz passt.
    Code:

    buch_t *sucheBuch(buch_t *buecher, int n) {
        char eingabe1[200];
        char eingabe2[200];
        char eingabe3[200];
        char dummy = 0;
        int i;
        char *pointer1;
        char *pointer2;
    
        printf("A:Ueber Buchnummer suchen\n");
        printf("B:Ueber Namen suchen \n");
        sscanf(gets(eingabe1),"%c", &dummy);
        switch(dummy) {
        case 'A':
        case 'a':
            printf("Geben Sie die Buchnummer ein:");
            gets(eingabe2);
            for(i=0 ; i<=n; i++) {
                pointer1 = strstr(buecher[i].buchNummer, eingabe2);
            }
            if(pointer1 != NULL) {
                printf("Buch : %s", pointer1);
            } else {
                printf("Es wurde kein Buch gefunden");
            }
            break;
        case 'B':
        case 'b':
            printf("Geben sie den Namen des Buches ein:");
            gets(eingabe3);
            for(i=0 ; i<=n; i++) {
                pointer2 = strstr(buecher[i].titel, eingabe3);
            }
            if(pointer2 != NULL) {
               printf("Buch : %s", pointer2);
            } else {
                printf("Es wurde kein Buch gefunden");
            }
            break;
        }
        return 0;
    }
    

    Hoffe auf Antworten!!



  • Welcher Fehler? Werd mal genauer, bitte (z.B. Fehlermeldung). Keiner hat Lust, zu raten. 🙂



  • Wenn ich starte und die Funktion aufrufe funktioniert es noch aber wenn ich versuche etwas einzugeben und ich Enter drücke kommt ein Windows Fenster : Programm funktioniert nicht mehr.
    Auf diese Struktur will ich zugreifen:

    typedef struct {
      char buchNummer[10];
      char *titel;
      int bestand;
      double preis;
    }   buch_t;
    


  • 1. Benutze bitte den Debugger. Dann siehst du auch, in welcher Zeile es kracht.

    2. Poste bitte die Fehlermeldung, die du dann in dieser Zeile bekommst.



  • Es kracht bei der Zeile 32 wegen strstr.



  • Bei welchem i passiert das, und wie kommen die Daten da rein.
    Ist buecher[i].titel überhaupt ein gültiger Zeiger?



  • Ist buecher[i] für jedes i gültig? Ist buecher[i].titel gültig?



  • Es muss höchstwahrscheinlich statt

    for(i=0 ; i<=n; i++)
    

    richtig

    for(i=0 ; i<n; i++)
    

    heissen. Klassischer Pfuscher JW Fehler.



  • Hier in dieser Zeile könnte ein Fehler liegen:

    [code]for(i=0 ; i<=n; i++) [/code]
    

    Aber überlege dir bitte, warum, das sieht für mich schon wieder so nach Hausaufgabe aus.
    Edit: Da war jemand schneller.



  • Es sind mehere Datensätze gespeichert die sind mit einer csv -Datei rein gekommen.
    Der Zeiger sollte gültig sein da es nur so weit zählen darf so viel Datensätze sind



  • Johannes2411 schrieb:

    Es sind mehere Datensätze gespeichert die sind mit einer csv -Datei rein gekommen.
    Der Zeiger sollte gültig sein da es nur so weit zählen darf so viel Datensätze sind

    Sollte ist schlecht. Überprüfe es doch. Nutze den Debugger! Setze dir einen Haltepunkt an dieser Stelle und überprüfe für jeden Durchlauf, ob die Zeiger gültig sind.



  • Hab es selber geschafft trotzdem Danke!!



  • Und was war die Lösung?



  • Johannes2411 schrieb:

    Hab es selber geschafft trotzdem Danke!!

    Und ...?
    Was war es?
    Andere die das hier finden hätten auch gerne die Lösung.



  • Ich hab den char *pointer weggelassen und die strstr direkt in die if-Verzweigung getan und nach dem printf ein break gemacht und jetzt gehts 🙂 🙂 🙂 🙂

    buch_t *sucheBuch(buch_t *buecher, int n) {
        char eingabe1[200];
        char eingabe2[200];
        char eingabe3[200];
        char dummy = 0;
        int i;
    
        printf("A:Ueber Buchnummer suchen\n");
        printf("B:Ueber Namen suchen \n");
        sscanf(gets(eingabe1),"%c", &dummy);
        switch(dummy) {
        case 'A':
        case 'a':
            printf("Geben Sie die Buchnummer ein: \n");
            gets(eingabe2);
            for(i=0 ; i<n; i++) {
    
                if(strstr(buecher[i].buchNummer, eingabe2)) {
                    printf("BuchNr: %s  Titel: %s  Bestand: %d Preis: %.2f  \n", buecher[i].buchNummer,
                           buecher[i].titel,
                           buecher[i].bestand,
                           buecher[i].preis);
                    break;
                }
            }
            break;
        case 'B':
        case 'b':
            printf("Geben sie den Namen des Buches ein: \n");
            gets(eingabe3);
            for(i=0 ; i<n; i++) {
                if(strstr(buecher[i].titel, eingabe3)) {
                    printf("BuchNr: %s  Titel: %s  Bestand: %d Preis: %.2f  \n", buecher[i].buchNummer,
                           buecher[i].titel,
                           buecher[i].bestand,
                           buecher[i].preis);
                    break;
                }
            }
            break;
        }
        return 0;
    }
    


  • Das geht vermutlich nur, weil immer ein Titel gefunden wird. Wenn der nicht gefunden wird und die Schleife bis zum Ende durchläuft, kracht's wahrscheinlich wieder (probier es am besten mal aus). Wie schon vermutet wurde, dürfte die Bedingung i<=n falsch sein.



  • Du hattest recht ich hab das = in der for-Schleife weggetan und jetzt gehts auch bis zum Schluss. Danke 🙂



  • Den Code hab ich oben jetzt richtig gemacht



  • Johannes2411 schrieb:

    Den Code hab ich oben jetzt richtig gemacht

    Super. 👍

    Mein Tipp an dich wäre folgender: wenn du nicht ständig raten willst, was denn dieses Mal wieder der Fehler ist, dann schau dir mal an, wie der Debugger funktioniert. Damit hast du solche Probleme im Handumdrehen gelöst, da du dir zur Laufzeit ansehen kannst, was so in den Variablen steckt, Haltepunkte setzen kannst uvm. 🙂



  • Werde ich machen.
    Danke 🙂


Anmelden zum Antworten