Frage zu einem C-Code



  • Hallo, ich bin neu hier im Forum und auch ein absoluter Anfänger was Programmierung angeht. Ich bin gerade dabei mir die C# Sprache beizubringen anhand des
    Buchs (C von A bis Z). Als IDE nutze ich DEV-C++.
    Das Problem ist, das ein im Buch aufgeführter Code bei mir nicht das gewünschte Ergebnis bringt und ich nun nicht weiß, ob es am Code oder am DEV-Compiler liegt.

    Zunächst einmal der Code

    /* suchmenge1.c */
    #include <stdio.h>
    int main(void) {
       char str[20];
       printf("Bitte geben Sie nur Zahlen ein: ");
       scanf("%[0–9]", str);
       printf("%s\n",str);
       fflush(stdin);
       getchar();
       return 0;
    }
    

    Sinn des Programms soll sein, daß man mehrere Zahlen eingibt (z.B.:12345). Wenn man anschließend mit "Enter" bestätigt, werden die eingegeben Zahlen angezeigt.
    Gibt man beispielsweise (12345e678) ein, werden nachdem bestätigen, nur die Zahlen 12345 angezeigt und der Rest eben nicht, da ein Buchstabe mit eingegeben wurde.

    Tja bei mir wird eben, egal was man eingibt, immer nur eine komische Zeichenkette angezeigt, unabhängig davon was ich nachdem Programmstart eingebe.

    Liegt das nun am Code oder am Compiler?

    Würde mich sehr freuen, wenn ihr mir weiterhelfen könntet.

    Vielen Dank.

    Mit freundlichen Grüßen

    Dave

    Mmmh, sorry aber:

    Das Problem hat sich irgendwie erledigt. Jetzt funktionierts komischerweise.
    Habe in dem Code einfach die [0-9] entfernt und neu eingegeben und jetzt geht es. Also das ist recht seltsam.

    Tut mir Leid das ich jetzt eigentlich völlig umsonst einen neuen Thread aufgemacht habe. Doch der Admin kann es gerne wieder löschen. Wirklich, tut mir Leid.

    Gruß Dave



  • Probier's mal hiermit:

    scanf("%s[0-9]", str);
    

    Du hattest keinen Typ (s für String) angegeben.



  • Hi, erstmals vielen Dank für den Tipp. Hatte ich auch schon ausprobiert. Doch dann übernimmt er alles was ich eingegeben habe, egal ob Zahlen oder Buchstaben. Wie gesagt, jetzt geht es aufeinmal. Siehe meinen ersten Beitrag.

    Trotzdem vielen Dank. Wirklich sehr nett.

    Gruß
    Dave



  • Hmm, du hast Recht. Meine Variante funktioniert nicht, deine funktioniert bei mir allerdings auch nicht, obwohl sie sollte. Strange...

    EDIT: Und deine Vorgehensweise, das "[0-9]" einfach zu löschen und nochmal hinzuschreiben HAT TATSÄCHLICH FUNKTIONIERT (VS2005)! Das soll einer verstehen...

    Und das Phänomen trat auf, da ich deinen Code kopiert hatte. Vielleicht hat sich ein nicht druckbares Zeichen darunter gemischt oder so...



  • _matze schrieb:

    Hmm, du hast Recht. Meine Variante funktioniert nicht, deine funktioniert bei mir allerdings auch nicht, obwohl sie sollte. Strange...

    EDIT: Und deine Vorgehensweise, das "[0-9]" einfach zu löschen und nochmal hinzuschreiben HAT TATSÄCHLICH FUNKTIONIERT (VS2005)! Das soll einer verstehen...

    Und das Phänomen trat auf, da ich deinen Code kopiert hatte. Vielleicht hat sich ein nicht druckbares Zeichen darunter gemischt oder so...

    Das '-' war bei mir ein Unicode-Zeichen, also ich den Code kopiert hatte.

    Gruß mcr



  • ^^das '-' ist ein 0x96. das echte '-' wäre ein 0x2d gewesen.
    ist schon doof, wenn webbrowser auch nicht-ascii zeichen anzeigen können.
    🙂



  • Wenn ich deine scanf-Zeile in HTerm (Terminal-Programm) kopiere, dann fehlt das "-"! Keine Ahnung, wie du das geschafft hast... aber sehr interessant!



  • Ah, Unicode. Ok...



  • Hallo zusammen,

    ich hätte eine weitere Frage an Euch.
    Wie könnte ich hier noch mit einbauen, daß wenn man Buchstaben anstatt Ziffern eingibt, es ebenfalls zur Meldung:"Falsche Eingabe! Bitte wiederholen: " kommt.
    Das funktioniert bisher nur, wenn man entweder 0 oder alles was über 5 liegt, eingibt. Sobald ich testweise einen Buchstaben eingebe, kommt es zu einer Endlosschleife.

    do
         {
             printf("\n\n Bitte ausw\204hlen: ");
             scanf("%i", &menuepunkt);
    
             if ((menuepunkt <= 0) || (menuepunkt >=6)) 
             printf("\a Falsche Eingabe! Bitte wiederholen: ");
         }
             while ((menuepunkt <= 0) || (menuepunkt >=6));
    

    Über einen Tipp wäre ich sehr dankbar.

    Gruß Dave 🙂





  • Danke für die Antwort, aber mit diesem Link kann ich leider nichts anfangen.
    Ich bin noch nicht soweit.

    Ich schreibe gerade ein einfaches Programm zur Übung.
    In diesem Programm kann man zu Beginn aus einem Menue, daß aus fünf Menuepunkten besteht, auswählen.

    1. xxx
    2. yyy
    3. vvv
    4. ppp
    5. nnn

    Bitte auswählen: .

    Mit der do while Schleife will ich erreichen, daß das Programm nur dann fortgesetzt wird, wenn die Eingabe einem Menuepunkt entspricht. Bisher klappt das aber nur mit
    den Ziffern. Sobald ein Buchstabe eingegeben wird, kommt es zu einer Endlosschleife.
    Kann ich die do while Schleife so erweitern, daß das Programm auch mit der Eingabe von Buchstaben nicht weiterläuft, oder wie muss ich das machen?

    Dankeschön.

    Gruß
    Dave



  • der link: da hat einer das gleiche anliegen wie du. er möchte auch nicht, das buchstaben, sondern nur zahlen eingegeben werden.
    die endlosschleife kannst du verhindern, indem du den eingabepuffer leer machst.

    wenn du deine menüpunkte auch mit buchstaben machen willst, dann musst du buchstaben oder zeichenketten einlesen und mit den menüpunkten vergleichen, z.b. mit strcmp



  • Hi Kuckuck,

    recht vielen Dank, man. Ich habe einfach wie du es gesagt hast, den Eingabepuffer leer gemacht und jetzt geht es wunderbar.

    do
         {
             printf("\n\n Bitte ausw\204hlen: ");
             scanf("%i", &menuepunkt);
             fflush(stdin);     //wie du es gesagt hast  :live: 
    
             if ((menuepunkt <= 0) || (menuepunkt >=6)) 
             printf("\a Falsche Eingabe! Bitte wiederholen: ");
             }
             while ((menuepunkt <= 0) || (menuepunkt >=6));
    

    Echt vielen Dank, wirklich.

    Gruß
    Dave




Anmelden zum Antworten