In String nach unerwünschten Zahlen suchen
-
const int len = 10; case 2: printf("\n\nBitte Zahl eingeben: "); scanf("%s",&bin); fflush(stdin); for (c = 0; c < len; c++){ if (bin[c] == '\0'){ break; } } a=0; while(a<c){ if(bin[a==c]=='\0'){ break; } if(bin[a]==48){ a++; } if(bin[a]==49){ a++; } else{ printf("\n\nBitte Zahl eingeben: "); scanf("%s",&bin); fflush(stdin); a=0; } } ausgabe=binaertodezimal(bin); printf("\n\nAusgabe: "); printf("%d",ausgabe); break;
Hab mein Code jetzt nochmal bearbeitet! Aber funzt leider net 100% richtig!
Man kann jetzt "falsche zahlen" eingeben aber z.B 0000 eingeben , da fordert er mich auf zur neueingabe..
Was ist falsch
-
Stell einen kopilierfähigen Code vor und Dir wird geholfen.
-
Soll kompilierfähig heissen, also mit main()- Funktion.
-
die zwei if machen so nicht das was du willst
versuch doch mal nen debugger zu verwenden.
-
das len ist meiner meinung nach überflüssig. in string.h gibts eine funktion strlen, die die stringlänge ermittelt, die würde ich anstatt der schleife dann verwenden.
int is_binary(char a) { return a=='0' || a=='1'; } //... int i; for(i=0; i<strlen(bin); ++i) if(!is_binary(bin[i])) //...
ungetestet.
-
Kuckuck !
Im Wesentlichen: Siehe teraformer.
Ansonsten:
Mit const int len = 10; beschränkst du die Prüfung der Binärzahl auf 10 Zeichen. Gewollt ?
Und ... das: scanf("%s",&bin); sieht gar nicht gut aus denn bin ist schon die Adresse, also: scanf("%s", bin);
Dies ist krasser Doppel-Moppel-Unsinn: if(bin[a==c]=='\0') denn es kann nur bin[0] oder bin[1] gegen '\0' geprüft werden, da Vergleich.
Gegen fflush(stdin); hat auch so manch einer Einwände.
Ich würde die Prüfung der Binärzahl eventuell auslagern.
Zur Feier des Tages habe ich dir mal eine Anregung getippselt, wie man die Eingabe prüfen könnte.
Eine "Standard" und eine "Comfort" Version#include <stdio.h> #include <math.h> // Rückgabewerte im boolean style: // Ok == 1 // Fehlerhafte Eingabe == 0 int check_eingabe_standard( char* pcStr ) { int i = 0; while( pcStr[i] ) { if ( pcStr[i] != '0' && pcStr[i] != '1' ) { puts("Fehler in der Eingabe !\n"); return 0; } i++; } return 1; } int check_eingabe_comfort( char* pcStr ) { char err_msg[256]; int i = 0; while( pcStr[i] ) { if ( pcStr[i] != '0' && pcStr[i] != '1' ) { sprintf( err_msg, "%*c%c", i + 30, ' ', '^' ); printf( "%30s%s\n%s\n\n", "Fehler in der Eingabe: ", pcStr, err_msg ); return 0; } i++; } return 1; } int main() { char bin[256]; do { printf( "%30s", "Bitte Binaerzahl eingeben: " ); scanf ( "%255s", bin ); } while ( ! check_eingabe_standard( bin ) ); }
Gru-huß,
p.
-
@ proggingmania: Thx für deine hilfe und das Programm
Ich möchte eine binär Zhal durch die andere Teilen.
jetzt darf da aber ja nichts mit 0, rauskommen und man darf nicht durch 0 teilen.Bsp 1111=15
0100=415/4=3,75
jetzt muss das Programm den Anwender auffoerdern neue Zahlen einzugeben!
Aber wie muss die bedignung heißen um dies herrauszufinden.
-
Kuckstdu ob alles Nullen im Array, wenn ja -> Fehlermeldung, geteilt wird nicht.
-
Warum des denn?
Wenn ich zum beispiel 4 eingebe steht 0100 drin
-
Du willst doch das Teilen durch Null verhindern richtig ?
Wenn alles Nullen im Array sind, dann ist das doch gleich Null.Brauchst du halt ne extra Abfrage für die Zahl durch die du teilst also den Divisor.
-
Und ? Ist dir ein Licht aufgegangen ?
Ja, aber nicht so hell ?
Klappts ?
Oder watt.
-
Doch mir is ein Lciht aufgeganen!
Aber mein Hauptproblem war nich die division durch Null sondern das auch Kommazahlen rauskommen dürfen!
Aber trotzdem danke.