scanf geht net... merkwürdiger Fehler !?



  • Hi @ll,
    wir haben gerade ne arbeit in (c) programieren geschrieben, in der letzten Aufgabe ging es darum, nen Programm zu schreiben, indem.
    1. die anzahl der auszugebenden buchstaben angegeben wird...
    2. der buchstabe, der ausgegeben werden soll..
    ^^ beides im hauptprogramm

    "1. und 2." sollten dann an eine Funktion übergeben werden, inder sie dann ausgegeben werden ...
    hier ma mein Programm:

    #include <stdio.h>
    #include <conio.h>
    
    void zeichen(int k, char z)
    {
        int i;
        for(i=0; i<k; i++)
        {
            printf("%c", z);
        }    
    
    }
    
    main()
    {
        int k;
        char z;
    
        printf("wiviel??: ");
        scanf("%i", &k);
        printf("was??: ");
        scanf("%c", &z);
    
        zeichen(k,z);
    
    getch();
    }
    

    wenn ihr es kompiliert soltet ihr merken, das er das zweite scanf net mehr behandelt, warum ??

    pls help 🙄

    _________________________
    greets chaosLT



  • beim ersten scanf() gibst du z.b. ein 5 und drückst dann die Entertaste. das scanf liest nur die 5 und das Enterzeichen bleibt im Eingabepuffer. Beim 2.ten scanf() wird dann nur das Enterzeichen aus dem Puffer gelesen



  • am besten ist es, wenn du nach jedem scanf()-aufruf ein

    fflush(stdin);
    

    oder ein

    while(getchar()!='\n');
    

    machst!



  • danke danke, funzt jetzt 🙂 <<
    hmm unser leherer hat uns das mitm fflush(stdin); & mitm while(getchar()!='\n'); nie erklärt .. hätte man die aufgabe auch ohne das lösen können ?



  • So sollte es auch funktionieren

    [cpp]#include <stdio.h>
    #include <conio.h>

    void zeichen(int k, char z)
    {
    int i;
    for(i=0; i<k; i++)
    {
    printf("%c", z);
    }

    }

    main()
    {
    int k;
    char z;

    printf("wiviel??: ");
    scanf("%i**\n**", &k);
    printf("was??: ");
    scanf("%c**\n**", &z);

    zeichen(k,z);

    getch();
    }
    [/cpp]

    Ach ja, "wiviel" schreibt sich nach der neuen Rechtschreibung in etwa so: "wieviel" 😃



  • chaosLT schrieb:

    danke danke, funzt jetzt 🙂 <<
    hmm unser leherer hat uns das mitm fflush(stdin); & mitm while(getchar()!='\n'); nie erklärt .. hätte man die aufgabe auch ohne das lösen können ?

    scanf("%d\n",...
    ist eine einfache lösung.

    oder alles in einem scanf ist noch einfacher.

    und fflush(stdin) ist nicht definiert, siehe Konsolen FAQ für eine bessere lösung.

    nebenbei bemerkt: man verwendet oft auch gerne fgets() um die ganze zeile einzulesen und analysiert sie dann erst. scanf mag ich deshalb nicht so, weil eben genau solche fehler auftreten...



  • Shade Of Mine schrieb:

    chaosLT schrieb:

    danke danke, funzt jetzt 🙂 <<
    hmm unser leherer hat uns das mitm fflush(stdin); & mitm while(getchar()!='\n'); nie erklärt .. hätte man die aufgabe auch ohne das lösen können ?

    scanf("%d\n",...
    ist eine einfache lösung.

    oder alles in einem scanf ist noch einfacher.

    und fflush(stdin) ist nicht definiert, siehe Konsolen FAQ für eine bessere lösung.

    nebenbei bemerkt: man verwendet oft auch gerne fgets() um die ganze zeile einzulesen und analysiert sie dann erst. scanf mag ich deshalb nicht so, weil eben genau solche fehler auftreten...

    yo , danke so hät ichs natürlich auch machen können, allerdings haben wir das noch net gelernt, wir lesen namen noch mit schleifen ein & aus, aba das mitm gets bzw fgets klappt super 🙂



  • Noch ne einfache Möglichkeit:

    #include <stdio.h>
    #include <conio.h>
    
    void print_zeichen(int anzahl, char zeichen)
    {
        int i;
        for(i = 0; i < anzahl; i++)
        {
            printf("%c", zeichen);
        }
    }
    
    int main(void)
    {
        int anzahl;
        char zeichen;
    
        printf("Anzahl: ");
        scanf("%d", &anzahl);
        getchar();
        printf("Zeichen: ");
        scanf("%c", &zeichen);
        getchar();
    
        print_zeichen(anzahl, zeichen);
    
        getch();
    }
    


  • Horst2 schrieb:

    So sollte es auch funktionieren

    [cpp] :
    printf("wiviel??: ");
    scanf("%i**\n**", &k);
    :[/cpp]

    Sicher? Also bei mir funktioniert das unter lcc-win32 und gcc 3.4.2 (mingw) nicht! ⚠



  • ähm für funktionen braucht man doch normalerweise "prototypen" oder nicht?



  • jaymes schrieb:

    ähm für funktionen braucht man doch normalerweise "prototypen" oder nicht?

    Nicht, wenn die Implementierung vor dem ersten Aufruf erfolgt
    (also "oberhalb" von main())

    Dumm nur, wenn sich die beiden Funktionen gegenseitig aufrufen sollen 🙂



  • gut, man lernt nie aus 😉


Anmelden zum Antworten