if, switch? wo funktioniert das?



  • hmmm, und wie schaffe ich es dann, dass wenn der Benutzer
    Buchstaben eingibt, dass er darauf hingewiesen wird, dass
    das falsch ist?



  • scanf gibt die Anzahl der erfolgreichen Konvertierungen zurück. Kommt hier 1 zurück, ist ein Integer gelesen worden, bei 0 nicht.

    Übrigens, darf man fragen, mit welchem Material du die Sprache lernst? Das scheint didaktisch ziemlich fragwürdig zu sein. Sowas wie " %i\0\n" würde man außer in seltenen Spezialfällen niemals machen, was soll das \0 da drin? Das gleiche gilt für goto.



  • 1. \0 ist drinnen weil als nächstmögliche Eingabe "fgets" kommt,
    2. ist einfacher, muss ich weniger printf's und scanf's schreiben ^^



  • Phenny schrieb:

    1. \0 ist drinnen weil als nächstmögliche Eingabe "fgets" kommt,
    2. ist einfacher, muss ich weniger printf's und scanf's schreiben ^^

    Das war jetzt als Antwort auf mich gedacht, oder? Kannst du das vielleicht nochmal mit anderen Worten formulieren? Um nicht zu sagen, nochmal neu denken?


  • Mod

    Phenny schrieb:

    1. \0 ist drinnen weil als nächstmögliche Eingabe "fgets" kommt,
    2. ist einfacher, muss ich weniger printf's und scanf's schreiben ^^

    ⚠ Wenn man von verschiedenen Leuten in verschiedenen Threads darauf hingewiesen wird, dass Lernmaterial und Programmierstil fragwürdig sind, dann sollten alle Alarmglocken schrillen. ⚠
    Das ist nicht die Zeit für Ausflüchte. Die Leute sind nur zu höflich zu sagen, dass das ganz großer Mist ist den du da produzierst. Und wo immer du das her hast, du wirst dir dort nur noch mehr Unsinn anlernen, wenn du weitermachst.



  • Also, wir sehen hier

    printf("\nWas soll die Maximale Wortlaenge sein?\n");
        scanf(" %i\0\n", &maxW);
    
        if (maxW =! int) 
        {
            printf("\nIst das überhaupt eine Zahl?\n\n");
            clearbuf();
            goto neueEingabe;
    
        } else {
    
            if (maxW > 26)
            {
                printf("\nZahl ist zu hoch...\n\n");
                clearbuf();
                goto neueEingabe;
    
            }
            return (0);
        }
    
        clearbuf();
    
        int *l=calloc(maxW,sizeof(int));    //dynamisch Speicher per calloc alloziert
    
        printf("Schreiben Sie ihren Text: \n");
        fgets(x,sizeof x,stdin);  //Eingabe des zu bearbeitenden Textes
    

    das nach der "scanf" Funktion als nächstmögliche Eingabe
    "fgets" kommt...das heißt: "fgets" wird ja übersprungen wenn kein \0
    in "scanf" steht, da er die "Entereingabe" sonst zu "fgets" überträgt
    und es dann "sozusagen" fgets überspringt.
    Und das "goto" habe ich aus Faulheit eingefügt, ganz einfach. 🙄 @Bashar

    Noch Fragen an mich?

    Übrigens, ja ich weiß das "goto" nicht gerade gut ist,
    ist auch nur vorübergehend ( Feinheiten bearbeite ich am Schluss^^)



  • @Sepj
    dieser Schnipsel da, kommt allein von mir...
    und das ist halt mein Programmierstil,
    übrigens wie im letzten Beitrag beschrieben, kommt das
    "goto" noch weg, es ist nur eine vorübergehender Weg,
    aber nicht die "Endlösung" bzw. "Endergebniss"


  • Mod

    Das ist es ja gerade: Das was du machst sind keine Kleinigkeiten oder vorübergehende Lösungen. Dieser Stil wird dir schon bald ganz gehörig Probleme bereiten, wenn du es dir nicht sofort abgewöhnst. Aber Warnung hattest du wohl genug. Ob du darauf hörst oder nicht ist deine Sache.

    Ist dein ursprüngliches Problem mit der Prüfung der Eingabe zu deiner Zufriedenheit gelöst?



  • Leider nein,
    ich weiß immernochnicht wie ich in einer "if-Abfrage"
    überprüfen kann, ob das Eigegebene eine Zahl oder ein Buchstabe ist. 😕


  • Mod

    Ist wohl etwas untergegangen 😉 :

    Phenny schrieb:

    Leider nein,
    ich weiß immernochnicht wie ich in einer "if-Abfrage"
    überprüfen kann, ob das Eigegebene eine Zahl oder ein Buchstabe ist. 😕

    SeppJ schrieb:

    Wenn das Eingegebene keine Zahl war, kommst du gar nicht so weit, dann scheitert schon die Eingabe. Zu Prüfen über den Rückgabewert von sscanf.

    SideWinder schrieb:

    Wenn maxW als "int" deklariert ist, kann er zu jedem Zeitpunkt nur einen Integer enthalten. Gibt der Benutzer keinen Integer ein kommt es bereits bei scanf zum Problem.

    Bashar schrieb:

    scanf gibt die Anzahl der erfolgreichen Konvertierungen zurück. Kommt hier 1 zurück, ist ein Integer gelesen worden, bei 0 nicht.



  • Phenny schrieb:

    1. \0 ist drinnen weil als nächstmögliche Eingabe "fgets" kommt,
    2. ist einfacher, muss ich weniger printf's und scanf's schreiben ^^

    [impolite]
    was für'n Schwachsinn, das eine hat mit dem anderen auch nicht einmal etwas zu tun
    [/impolite]

    \0 ist die 0-Terminierung, die sagt, dass der Rest nicht zur Zeichenkette gehört. scanf liest Werte abhängig vom Format. Wenn du im Format Zeichenkette berets eine \0 schreibst, dann wird der Rest erst Recht ignoriert.

    printf("\nWelche ist die Maximale Wortlaenge sein?\n");
    if(scanf("%i", &maxW) != 1)
      EINGABE UNGÜLTIG
    

    Ich rate vom scanf ab, da immer Ärger mit dem leeren des Puffers bereitet. Nimm lieber [c}fgets[/c].



  • Phenny schrieb:

    Leider nein,
    ich weiß immernochnicht wie ich in einer "if-Abfrage"
    überprüfen kann, ob das Eigegebene eine Zahl oder ein Buchstabe ist. 😕

    dann solltest du zuerst lesen lernen, denn mind. 2 Mal wurde dir gesagt, dass du den return Wert von scanf auswerten solltest.

    Meine Güte, es gibt manche Leute, die sich so schwer tun, sich helfen zu lassen... 😕



  • Ich habe ja von einer Funktion gehört,
    die Buchstaben, als Ansi-Code behandelt...also in
    der Tabelle in der Zahlen als Buchstaben definiert sind
    A = 65

    mit der könnte ich ja theoretisch in der if-Abfrage
    den Bereich der Buchstaben abfragen, nur wie
    mache ich das bitte wenn es schon bei der Eingabe scheitert...
    Muss ich dann in scanf %c machen?
    Oder hilft dort nur eine andere Eingabefunktion?
    Denn mit fgets bekomme ich dann wieder unheimlich viele Probleme, da maxW kein pointer ist.



  • ja, der Return wert von scanf...
    wie kann ich den denn prüfen lassen?
    if (scanf == true) ? ich hab nochnie eine
    erfolgreiche Eingabe geprüft... 😞


  • Mod

    Wenn du Antworten nicht einmal liest brauchst du dich in Zukunft auch nicht zu wundern, wenn dir keiner mehr antwortet. Ich werde es jedenfalls nicht mehr tun.



  • okay, hab das von supertux erst beim zweitenmal lesen verstanden.

    Tut mir sorry 😋



  • Aus Interesse: Auf welcher Seite lernst du C?

    den Rückgabewert von scanf kannst du zwischenspeichern, z.B.

    int rueckgabe = scanf("%i", &wertMax);
    

    und anschließend mit

    if(rueckgabe == 0) {
       // (kein) Erfolg
    } else {
       // (kein) Erfolg
    }
    

    überprüfen.
    Als Übung darfst du mal im Internet suchen, was scanf als Rückgabewert bei einer 'erfolgreichen' Eingabe zurückliefert.
    Aber was dir hier einige sagen wollen: Such dir ein gutes Buch! Mach dir nichts vor, dass es nur Kleinigkeiten sind. Hier fehlen Grundkenntnisse!

    nobody44



  • hmm, hast recht.
    Werde mir das mal zu Herzen nehmen, danke danke Kollege



  • Um deiner Frage noch schnell nachzukommen,
    ich schaue oft bei http://www.peacesoftware.de/



  • Phenny schrieb:

    Um deiner Frage noch schnell nachzukommen,
    ich schaue oft bei http://www.peacesoftware.de/

    Also das Tutorial sieht nicht sehr toll aus. Ich hab nur kurz mal 'reingesehen, aber da werden schon veraltete Header verwendet (z.B. stdio.h). Und die Empfehlung, Programme erst ab 1000-2000 Zeilen zu modularisieren (in mehrere Dateien zu unterteilen), finde ich auch fragwürdig. Außerdem ist der Schreibstil... seltsam. Sieh dich lieber nach was Aktuellerem und Besserem um. Vielleicht ist ein Buch statt einem Tutorial da auch die bessere Wahl.

    EDIT: Allein, wenn ich mir schon seine Rechtschreibung ansehe, wird mir schlecht... 😉

    EDIT2: Rückgabewerte werden da allerdings schon erklärt! :p


Anmelden zum Antworten