Wie verbiete ich Buchstaben einfach und simpel in C?
Ich habe vor ein paar tagen mit dem Programmieren angefangen und arbeite gerade and einem Taschenrechner. Da wo die Zahlen eingegeben werden können soll kurz und simpel ein Code stehen der Buchstaben und Sonderzeichen verbietet.
Bis jetzt funktioniert alles.
Der Code sieht gerade so aus:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{
float a,b;
char l;
printf("Tippe Y um zuzustimmen das sie keine ungefragten angaben verwenden werden und tippen sie L um dem nicht zu zustimmen!:");
scanf("%c",&l);
switch(l){
case 'Y': printf("Vielen Dank das sie Kooperation!\n");
break;
case 'L': printf ("Keine Gnade!\n");
exit(0);
break;
default: printf ("\n");
exit(0);
break;
}
printf("Erste Zahl eingeben:");
scanf("%f",&a);
printf("Zweite Zahl eingeben:");
scanf("%f",&b);
float erga,ergs,ergd,ergm;
/*
Ein Kommentar
*/
char r;
printf("Gebe eine Rechenart an +,-,/,%,*:");
scanf("\n%c",&r);
switch(r) {
case '+':
erga = a + b;
printf("Ergebnis Addition: %f + %f = %f\n", a,b,erga);
break;
case '-':
ergs = a - b;
printf("Ergebnis Subtraktion: %f - %f = %f\n",a,b, ergs);
break;
case '/':
if (b==0){
printf("Division durch 0 ist nicht definiert!\n");
break;}
else {
ergd = a / b;
printf("Ergebnis Division: %f / %f = %f\n",a,b, ergd);
break;}
case '*':
ergm = a * b;
printf("Ergebnis Multiplikation: %f * %f = %f\n",a,b, ergm);
break;
default: printf("Ihre Angabe ist keine der erlaubten Rechenarten, erlaubt sind +,-,%,/,* \n versuchen sie es erneut:\n");
exit(0);
break;
}
int ss;
printf("Um abzubrechen tippen sie die 1 um den vorgang zu wiederholen tippen sie die 2:");
scanf("\n%d",&ss);
switch(ss){
case 1: printf("Auch wiedersehen!");
break;
case 2: return main();
break;
default: printf("Angabe nicht definiert, automatischer Abbruch");
break;
}
return 0;
}
4 Antworten
Zuerst: Du kannst Code-Fragen hier mit der "Quelltext"-Funktion wesentlich übersichtlicher stellen als rein als Text..
Dann: Du kannst den eingelesenen Character prüfen mit seinem Wert in der ASCII-Tabelle. Sprich: Wenn er in der Range eines Buchstabens liegt, dann kannst du es ablehnen, wenn er in der Range einer Zahl liegt (0-9), dann zulassen.
https://www.torsten-horn.de/techdocs/ascii.htm
Das Alphabet geht von 65 ("A") - 90 ("Z") bzw. 97 ("a") - 122 ("z"). Die Range für Zahlen kannst du ebenfalls ablesen aus der Tabelle.
Man könnte so etwas machen:
int i;
float f;
char c;
i = scanf("%f%c", &f, &c);
Da muss i = 2 und c = 10 sein, d.h. nach der Zahl muss ein Newline-Zeichen (10 bzw. '\n') kommen.
Du hast vergessen, ne Frage zu stellen :D
Tipp: Etwas verbieten kann ziemlich umständlich sein, wenn es sehr viele Möglichkeiten gibt. Du kannst zum Beispiel 143859 unterschiedliche Zeichen eingeben. Willst Du alle testen!? Besser ist es, alles zu verbieten ausser den explizit erlaubten Zeichen. bei einem Taschenrechner würde ich also zwei Eingabefälle unterscheiden: Operatoren (+, -, *, …) und Werte. Für letztere brauchst Du nur 0-9, sowie ein oder zwei Dezimaltrenner (damit Punkt oder Komma gehen) . Luxus wär noch, Leerzeichen und anderen Whitespace rauszufiltern, so sollte zb:
3 458.05
…eine gültige Eingabe sein, falls das jemand irgendwo her kopiert.
Mach den Text zu einem String und nutze die .find() Funktion dort einfach den Buchstaben eintragen und so einfach ist die Abfrage