#1 6. Mai 2012 Zuletzt bearbeitet: 14. Mai 2012 [SOLVED] Stringlänge prüfen Heyho, wir müssen z.Z. in C eine kleines Programm schreiben, welches die Ausgabe auf eine kleine LCD anzeige umleitet. Dazu haben wir die Methoden: putstring("Hallo Hallo"), um etwas zu printen und getstring(var1) um eine eingabe einzulesen und in var1 zu speichern. wir sollen jetzt ein programm schreiben, welches testet, ob die eingebenen Strings länger als 5 zeichen sind und ob sie nur zahlen enthalten. Mein Ansatz: Code: int main() { char zahl1[6]; char zahl2[6]; int i; putstring("Erste Zahl eingeben: "); getstring(zahl1); while(zahl1[0] == 0 || zahl[5] > 0) { putstring("Fehlerhafte Eingabe!"); putstring("Erste Zahl eingeben: "); getstring(zahl1); } } Aber er nimmt nur Zahlen an, welche GENAU 5 Zeichen lang sind. Die Überprüfung, ob es nur Zahlen sind krieg ich hin, die lass ich hier raus. Ich verstehe nicht wieso der Code nicht geht. Wir dürfen auch nur die beiden oben genannten Funktionen nutzen. Mein Gedanke: ASCII Wert für leeres Element = 0 (NULL) Folgen weitere leere dann ist der Wert = -1 Oder hab ich da was falsch verstanden? + Multi-Zitat Zitieren
#2 6. Mai 2012 Zuletzt bearbeitet: 6. Mai 2012 AW: Stringlänge prüfen bah wie ich solche aufgabenstellungen hasse... cctype (ctype.h) - C++ Reference cstring (string.h) - C++ Reference --------------------- ist das eine hausaufgabe? + Multi-Zitat Zitieren
#3 6. Mai 2012 AW: Stringlänge prüfen Das ist unsere Praktikumsaufgabe, ein Teil davon.. bin an ner FH. Hier nochmal mein Versuch schon mit Zahlencheck, aber er will net -.- Code: int main() { char zahl1[6]; char zahl2[6]; int i; putstring("Erste Zahl eingeben: "); getstring(zahl1); for(i=0; i<=4; i++) { while((zahl1[0] == 0) || (zahl1[i] < 48 && zahl1[i] > 57) || zahl1[5] > 0) { putstring("Fehlerhafte Eingabe!"); putstring("Erste Zahl eingeben: "); getstring(zahl1); } } putstring("OK"); } + Multi-Zitat Zitieren
#4 6. Mai 2012 AW: Stringlänge prüfen Du vergleichst Chars und Integer. Wenn du nicht mit ner ASCII Tablle arbeiten willst, muss du mit == '0' vergleichen, das macht das ganze auch übersichtlicher. Dass die Whileschleife nur bei genau 5 Zeichen terminiert ist klar. Die läuft so lange, biss das 6. Element deines Strings 0 (= '\0' bzw. NUL bzw. "Endekennung") ist. Dies ist logischwerise nur dann der Fall, wenn der String genau 5 Zeichen lang ist. Ich würde den String einfach iterieren und schauen, wo '\0' sitzt. //edit: Ohje viel zu lahm + Multi-Zitat Zitieren
#5 6. Mai 2012 AW: Stringlänge prüfen okay einen fehler habe ich beheben können. es muss heißen Code: (zahl1[i] < 48 [B]||[/B] zahl1[i] > 57) aber trotzdem halt nur ok, wenn GENAU 5 zahlen + Multi-Zitat Zitieren
#6 6. Mai 2012 AW: Stringlänge prüfen Ich habs zwar schon in #4 geschrieben und ausführlich erklärt aber doppelt hält bekanntlich besser: zahl1[5] > 0 gilt nur, wenn der String 5 Zeichen (6. Element = '\0') lang ist. Du musst den String Zeichenweise iterieren und prüfen. 1 Person gefällt das. + Multi-Zitat Zitieren
#7 6. Mai 2012 AW: Stringlänge prüfen Ja schon klar, aber wenn der String z.B. nur 3 Zeichen hat, dann müsste zahl1[4] doch -1 sein oder nicht? + Multi-Zitat Zitieren
#8 6. Mai 2012 Zuletzt bearbeitet: 6. Mai 2012 AW: Stringlänge prüfen hab dein problem mal eben mit meinem leihen c zusammengebaut: Code: #include <stdlib.h> #include <stdio.h> int main() { char zahl1[6] = { '\0' }, zahl2[6] = { '\0' }; fflush(stdin); for (;;) { puts("Erste Zahl eingeben: "); fgets(zahl1, sizeof(zahl1), stdin); unsigned fail = 0, npos = 0; for (unsigned i = 0; i < 5 && !fail; ++i) { switch (zahl1[i]) { case '0': if (npos == 0) fail = 1; break; case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': npos = 1; break; default: fail = 1; } } if (!fail) break; puts("Fehlerhafte Eingabe!"); } puts("Okay!"); return 0; } puts/fgets sollte deinen funktionen entsprechen oder? 1 Person gefällt das. + Multi-Zitat Zitieren
#9 6. Mai 2012 Zuletzt von einem Moderator bearbeitet: 13. Mai 2012 dank di! werds nachher mal testen. gerade keine zeit.. ------------------- hinzugefügter Beitrag -------------------- Bin endlich mal dazu gekommen es zu testen. Das funktioniert aber trotzdem nicht, da auch zahlen, welche länger als 5 "zeichen" haben, akzeptiert werden.. + Multi-Zitat Zitieren
#10 13. Mai 2012 AW: Stringlänge prüfen Guckst Du auch selber mal durch die Referenzen? Da gibts logisch aufgebaute Rubriken mit sich sprechenden Funktionen die extra für dein Vorhaben da sind. Bitte schaue dich dort mal nach strlen, isdigit, etc. rum. Solange is das Thema hier geschlossen, denn nach sovielen Tagen ohne Lösung bzw. einem Lösungsansatz ist es kaum vorstellbar, dass Du dich selber um das Problem gekümmert hast. 1 Person gefällt das. + Multi-Zitat Zitieren
#11 14. Mai 2012 Zuletzt bearbeitet: 14. Mai 2012 AW: Stringlänge prüfen Okay habs jetzt selber hinbekommen. Hier also die Funktion um einen String auf Zahlen & Länge <= 5 zu testen ohne schon vorhandenen Funktionen zu nutzen Code: int main() { char zahl1[10]; unsigned int i, end1, fail = 1; do { putstring("Erste Zahl eingeben: "); getstring(zahl1); for(i=0; i<=6; i++) { if(zahl1[i] == 0) { end1 = i; break; } } if(end1 > 5) { putstring("Zahl zu lang."); fail = 1; } else if(end1 > 0 && end1 < 6) { for(i=0; i<end1; i++) { if(zahl1[i] < '0' || zahl1[i] > '9') { fail = 1; break; } else fail = 0; } } else { fail = 1; } } while(fail); puts("OK") } + Multi-Zitat Zitieren