Zum Inhalt springen

C-Abfrage: Ziffer oder Buchstabe?


Tamesis

Empfohlene Beiträge

Hallo,

ich bin gerade mal im 1. Lehrjahr zur Informatikkauffrau und lerne momentan C, also sind gerade bei den absoluten Grundlagen.

Nun habe ich ein bisschen vorgearbeitet und einen Taschenrechner programmiert. Mein Arbeitskollege hat mich aber darauf hingewiesen, dass man auch anstatt Zahlen Text eingeben kann.

Gibt es irgendeine Abfrage, die unterscheiden kann zwischen Zahlen und Buchstaben, damit eine Fehlermeldung ("Fehler, bitte geben Sie eine ZAHL ein" oder irgend so was) ausgegeben kann, wenn Text eingegeben wurde?

Liebe Grüße

Tamesis

Link zu diesem Kommentar
Auf anderen Seiten teilen

Stichwort: Zeichenklassifizierung und Umwandlung

Hinter dem Link verbirgt sich das OpenBook "C von A bis Z", mit dessen Hilfe ich meine ersten Gehversuche in C unternahm. Aber das nur am Rande...

Für Dich interessant wäre die dort beschriebene Headerdatei "<ctype.h>" mit den Funktionen "isalpha" und "isdigit". Alternativ kannst Du natürlich auch die ASCII-Werte der einzelnen Zeichen manuell prüfen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

All diese Funktionen setzen aber voraus, dass die Eingabe als Zeichenkette vorliegt, und selbst dann kann man nur jedes Zeichen einzeln prüfen.

Ich würde als einfachste Lösung erst einmal den Rückgabewert von scanf prüfen ;)

Link zu diesem Kommentar
Auf anderen Seiten teilen

also ich les die Eingabe mit scanf ein, und dann?

also beispielsweise:

scanf("%f", &eingabe1);

...

scanf("%f", &eingabe2);

und wie kann ich jetzt festsetzen, dass float nur zahlen beinhalten darf und dass, falls irgendetwas anderes eingetippt wird, eine Fehlermeldung erscheint? mir würde da spontan nur die switch-case-Variante einfallen, wüsste aber nicht, was die einzelnen fälle dann sein sollten...

und danke an unbenannt, die tabelle wird mir später sehr nützlich sein ;)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Da ich noch nie mit scanf() gearbeitet habe (keinerlei Verwendungsmöglichkeit in meinem derzeitigen Projekt) bin ich mal vorsichtig und bitte um Korrektur, sollte ich mich irren.

scanf - Format prüfen

scanf() liefert als Rückgabewert die Anzahl der erfolgreich gelesenen Werte. Im Fall von

scanf("%f", &eingabe1);

müsste also eine 1 zurückgeliefert werden.

All diese Funktionen setzen aber voraus, dass die Eingabe als Zeichenkette vorliegt, und selbst dann kann man nur jedes Zeichen einzeln prüfen.

Vielen Dank für den Hinweis. Da ich bislang größtenteils nur Zeichenketten zerlegen und verarbeiten musste, gibt es wohl noch einiges, was ich noch lernen muss.

Link zu diesem Kommentar
Auf anderen Seiten teilen

hm o.O wenn ich das aus dem unterricht richtig verstanden habe, liest scanf den speicher der tastatur aus und setzt das dann für die variable, die in meinem fall jetzt eingabe 1 heißt... es sei denn ich hab da grundlegend was missverstanden o.O

scanf liest vom Standardeingabestrom des Prozesses, da muss nicht zwangsläufig die Tastatur dahinterstehen, das Konzept ist allgemeiner. Im Normalfall ist es aber so.

Scanf wertet dabei den Formatstring aus ("%f" in deinem Fall) und schreibt dann die eingelesenen Daten in die zusätzlichen Parameter.

Außerdem hat die Funktion aber auch noch einen Rückgabewert, den du abfragen kannst, indem du den Ausdruck mit dem Funktionsaufruf einer int-Variablen zuweist:

int result = scanf( ... );

Link zu diesem Kommentar
Auf anderen Seiten teilen

hm... das mit dem int result funktioniert bei mir nicht, er ließt da irgendwie gar nicht mehr ein O.o

aber meine frage ist immer noch, wie kann ich unterscheiden, ob der benutzer wörter oder zahlen eintippt... vielleicht geht das mit c in dieser form auch gar nicht, hab im internet darüber leider nichts gefunden...

Link zu diesem Kommentar
Auf anderen Seiten teilen

tschuldigung, hab ich vergessen o.O

ich gebe die erste zahl ein, drücke enter und es passiert nichts. ich kann so oft enter drücken wie ich will, es passiert nichts ;) das meinte ich mit "er ließt da irgendwie gar nicht mehr ein"


#include <stdio.h>

#include <stdlib.h>


int main(void)

{

    float erste_zahl;

    float zweite_zahl;

    char operatoren;

    float ergebnis;

    char wiederholung;


    do

    {

    system("Cls");

    printf("\t\tTaschenrechner\n\n");

    printf("Bitte geben Sie Ihre erste Zahl ein (Punkt anstatt Komma!):\n");

    scanf("%f", &erste_zahl);

    fflush(stdin);


    int result = scanf("%f", &erste_zahl);

    printf("%d", result);

    system("pause");


    system("Cls");


    printf("\n\nBitte geben Sie Ihre zweite Zahl ein (Punkt anstatt Komma!):\n");

    scanf("%f", &zweite_zahl);

    fflush(stdin);


    system("Cls");

    do

    {

    printf("\n\nBitte geben Sie die Zahl f\x81r die Rechenart, die sie durchf\x81hren wollen, an\n");

    printf("(+ = Addition, - = Subtraktion, * = Multiplikation, / = Division):\n");

    scanf("%c", &operatoren);

    fflush(stdin);


    system("Cls");



    switch(operatoren)

    {

                      case '+':         /* Addition */

                      ergebnis = erste_zahl + zweite_zahl;

                      printf("\n\nErgebnis: %.2f \n\n\n", ergebnis); 

                      break;

                      case '-':         /* Subtraktion */

        	          ergebnis = erste_zahl - zweite_zahl;

                      printf("\n\nErgebnis: %.2f \n\n\n", ergebnis); 

        	          break;

                      case '*':         /* Multiplikation */

        	          ergebnis = erste_zahl * zweite_zahl;

                      printf("\n\nErgebnis: %.2f \n\n\n", ergebnis); 

                      break;

                      case '/':         /* Division */

      	              ergebnis = erste_zahl / zweite_zahl;

                      printf("\n\nErgebnis: %.2f \n\n\n", ergebnis); 

                      break;

                      default:          /* Operator unbekannt! */

                      printf("\n\n! FEHLER: Operator unbekannt!\n\n");

    }

    }while(operatoren != '+' && operatoren != '-'&& operatoren != '*'&& operatoren != '/');

    printf("\n\nMoechten Sie weiterrechnen? (j/n):\n");

    printf("\"n\" beendet das Programm!");

    scanf("%c", &wiederholung);

    }while (wiederholung != 'n');


    return 0;

}

Link zu diesem Kommentar
Auf anderen Seiten teilen

den solltest du ganz schnell loswerden ;)

Der ist total veraltet und verbuggt, wird aber leider meistens von Anfängern weiterempfohlen.

Wenn du unter Windows arbeitest ist Visual C++ Express von Microsoft zu empfehlen.

PS: Falls du unter Windows arbeitest kannst du auch fflush(stdin) verwenden weil es dort den Eingabepuffer löscht....

Link zu diesem Kommentar
Auf anderen Seiten teilen

hm, ich glaube, ihr habt mein problem noch nicht ganz verstanden... vielleicht hab ich mich auch etwas verständlich ausgedrückt.

ich habe mit dem taschenrechner selbst kein problem, der läuft und rennt wunderbar, sowohl mit dev-c++ als auch mit visual c++.

Ich möchte allerdings eine Abfrage gestalten, die dem Benutzer erlauben, nur mit Zahlen weiter zu kommen, nicht aber mit Buchstaben.

D.h. wenn der Nutzer sieht "Bitte geben Sie eine Zahl ein:" und "4" eintippt, gehts weiter zur zweiten Zahl. Wenn er allerdings "vier" eintippt, soll eine Fehlermeldung erscheinen, die ihm sagt, dass er nur Ziffern benutzen darf.

Meine Frage war nun, ob das mit C überhaupt geht und wenn ja, wie.

Link zu diesem Kommentar
Auf anderen Seiten teilen

ich muss also bloß int result = scanf( ... ); eingeben, nur was muss ich dann damit tun?

Dann musst du den Wert von result prüfen. scanf gibt die Anzahl der erfolgreich eingelesenen Felder zurück, oder EOF bei einem Fehler.

In deinem Fall würde das in etwa so aussehen:

if( result == 1 )
{
// Eingabe OK
}
else
{
// Fehler
}[/code]

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...