Feldbreite "%81d" ?



  • Hallo Community,

    ich möchte gerne folgenden Source zum laufen bringen.
    Wenn man bei der Artikelnummer mehr als 8 zeichen eingibt, wird allerdings das nächste scanf übersprungen. Ich weiß aber nicht wieso? Normal sollte das Problem doch die Feldbreite beschneiden, warum führt das zu einem Problem?

    #include <stdio.h>
    
    int main() {
    
        long artikelnummer;
        int stueckzahl;
        float preis;
    
        printf("Bitte geben Sie die max. achtstellige Artikelnummer ein:\n");
        scanf("%8ld",&artikelnummer);
        fflush(stdin);
        printf("Bitte geben sie die Stueckzahl ein:\n");
        scanf("%d",&stueckzahl);
        fflush(stdin);
        printf("Bitte geben Sie den Preis ein:\n");
        scanf("%f",&preis);
    
        printf("Artikelnummer\t\tStueckzahl\t\tStueckpreis\n");
        return 0;
    }
    


  • fflush(stdin);
    

    Ist nicht Bestandteil des C-Standard ⚠

    Bisher hab ich das nur bei einem Compilerhersteller in der Doku gefunden, das das bei diesem Compiler zuverlässig funktionieren soll.
    Wenn du das nicht in der Doku deines Compilers findest, gehe davon aus das das nicht immer so arbeitet wie beabsichtigt.

    Da sollte es aber viele Beiträge hier im Forum geben.

    MfG f.-th.



  • Hallo,

    Danke für den Hinweis, das Problem muss aber woanders liegen.
    Denn ohne fflush gibt es selbiges Problem.

    Lg

    Siehe Hier:

    http://imageshack.us/photo/my-images/37/bildschirmfoto20110630u.png/



  • Okay, wenn du in C mehr Zeichen per Tastatur in den Pufferspeicher eingibst als wie du dann ausliest, dann meint jedes folgende scanf, solange noch Zeichen im Pufferspeicher sind, du hättest schon weitere Eingaben gemacht.

    Also musst du erst die nicht passenden Eingaben bearbeiten/auslesen, ehe du weitere Daten von der Tastatur einlesen kannst.

    Siehe auch:
    http://www.c-plusplus.net/forum/p1442350

    MfG f.-th.



  • Im Übrigen besteht ein Unterschied zwischen deiner gewählten Überschrift und der Stelle im Quelltext.

    "%81d"
    

    ist durchaus für den Compiler etwas anderes als

    "%8ld"
    


  • danke


Anmelden zum Antworten