Zurück   RR:Board > Computer > Programmierung & Entwicklung

Entwicklung und Coding in verschiedenen Programmiersprachen: Assembly, C++, C#, Perl, Delphi, .NET, Visual Basic...
Antwort
 
Themen-Optionen Thema durchsuchen

[C/C++] - [SOLVED] Stringlänge prüfen
Alt 06.05.2012, 19:54   # 1
Mr. Mouse
Kabel Wurm
rot rot rot 
Bewertung:
Mr. Mouse hat die Renommee-Anzeige deaktiviert
Registriert seit: Sep 2006
Internet: >=50Mbit
Beiträge: 962
Power: 21
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?

- arch-user -

Geändert von Mr. Mouse (14.05.2012 um 14:02 Uhr).
  Mr. Mouse ist offline   Mit Zitat antworten

Alt 06.05.2012, 20:02   # 2
Murdoc
Moderator
team
Bewertung:
Murdoc hat mehr als 25.000 PunkteMurdoc hat mehr als 25.000 PunkteMurdoc hat mehr als 25.000 PunkteMurdoc hat mehr als 25.000 PunkteMurdoc hat mehr als 25.000 PunkteMurdoc hat mehr als 25.000 PunkteMurdoc hat mehr als 25.000 PunkteMurdoc hat mehr als 25.000 PunkteMurdoc hat mehr als 25.000 PunkteMurdoc hat mehr als 25.000 Punkte
Murdoc hat mehr als 25.000 PunkteMurdoc hat mehr als 25.000 PunkteMurdoc hat mehr als 25.000 PunkteMurdoc hat mehr als 25.000 Punkte
Registriert seit: Nov 2006
Internet: DSL2 16K
Beiträge: 6.168
Power: 52
Zitat:
Ich verstehe nicht wieso der Code nicht geht. Wir dürfen auch nur die beiden oben genannten Funktionen nutzen.
bah wie ich solche aufgabenstellungen hasse...

http://www.cplusplus.com/reference/clibrary/cctype/
http://www.cplusplus.com/reference/clibrary/cstring/

---------------------

ist das eine hausaufgabe?

MfG Murdoc

Meins: http://murdoc.eu

Geändert von Murdoc (06.05.2012 um 20:06 Uhr).
  Murdoc ist offline   Mit Zitat antworten

AW: Stringlänge prüfen
Alt 06.05.2012, 20:07   # 3
Mr. Mouse
Kabel Wurm
rot rot rot 
Bewertung:
Mr. Mouse hat die Renommee-Anzeige deaktiviert
Registriert seit: Sep 2006
Internet: >=50Mbit
Beiträge: 962
Power: 21
Themenstarter
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"); }

- arch-user -
  Mr. Mouse ist offline   Mit Zitat antworten

AW: Stringlänge prüfen
Alt 06.05.2012, 20:08   # 4
MasterJulian
Ehrenmitglied
vip
Bewertung:
MasterJulian hat mehr als 25.000 PunkteMasterJulian hat mehr als 25.000 PunkteMasterJulian hat mehr als 25.000 PunkteMasterJulian hat mehr als 25.000 PunkteMasterJulian hat mehr als 25.000 PunkteMasterJulian hat mehr als 25.000 PunkteMasterJulian hat mehr als 25.000 PunkteMasterJulian hat mehr als 25.000 PunkteMasterJulian hat mehr als 25.000 PunkteMasterJulian hat mehr als 25.000 Punkte
MasterJulian hat mehr als 25.000 PunkteMasterJulian hat mehr als 25.000 PunkteMasterJulian hat mehr als 25.000 PunkteMasterJulian hat mehr als 25.000 Punkte
Registriert seit: Dec 2004
Internet: VDSL 16Mbit
Beiträge: 7.648
Power: 63
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

Mein DIY T-Amp Projekt
Ich biete KEINE Privatberatung!
Das hier ist ein Forum. Erstell nen Thread wenns Probleme gibt.
  MasterJulian ist offline   Mit Zitat antworten

AW: Stringlänge prüfen
Alt 06.05.2012, 20:17   # 5
Mr. Mouse
Kabel Wurm
rot rot rot 
Bewertung:
Mr. Mouse hat die Renommee-Anzeige deaktiviert
Registriert seit: Sep 2006
Internet: >=50Mbit
Beiträge: 962
Power: 21
Themenstarter
okay einen fehler habe ich beheben können.

es muss heißen

Code:
(zahl1[i] < 48 || zahl1[i] > 57)
aber trotzdem halt nur ok, wenn GENAU 5 zahlen

- arch-user -
  Mr. Mouse ist offline   Mit Zitat antworten

AW: Stringlänge prüfen
Alt 06.05.2012, 20:22   # 6
MasterJulian
Ehrenmitglied
vip
Bewertung:
MasterJulian hat mehr als 25.000 PunkteMasterJulian hat mehr als 25.000 PunkteMasterJulian hat mehr als 25.000 PunkteMasterJulian hat mehr als 25.000 PunkteMasterJulian hat mehr als 25.000 PunkteMasterJulian hat mehr als 25.000 PunkteMasterJulian hat mehr als 25.000 PunkteMasterJulian hat mehr als 25.000 PunkteMasterJulian hat mehr als 25.000 PunkteMasterJulian hat mehr als 25.000 Punkte
MasterJulian hat mehr als 25.000 PunkteMasterJulian hat mehr als 25.000 PunkteMasterJulian hat mehr als 25.000 PunkteMasterJulian hat mehr als 25.000 Punkte
Registriert seit: Dec 2004
Internet: VDSL 16Mbit
Beiträge: 7.648
Power: 63
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.

Mein DIY T-Amp Projekt
Ich biete KEINE Privatberatung!
Das hier ist ein Forum. Erstell nen Thread wenns Probleme gibt.
  MasterJulian ist offline   Mit Zitat antworten

AW: Stringlänge prüfen
Alt 06.05.2012, 20:34   # 7
Mr. Mouse
Kabel Wurm
rot rot rot 
Bewertung:
Mr. Mouse hat die Renommee-Anzeige deaktiviert
Registriert seit: Sep 2006
Internet: >=50Mbit
Beiträge: 962
Power: 21
Themenstarter
Zitat:
Zitat von MasterJulian Beitrag anzeigen
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.
Ja schon klar, aber wenn der String z.B. nur 3 Zeichen hat, dann müsste zahl1[4] doch -1 sein oder nicht?

- arch-user -
  Mr. Mouse ist offline   Mit Zitat antworten

AW: Stringlänge prüfen
Alt 06.05.2012, 20:38   # 8
Murdoc
Moderator
team
Bewertung:
Murdoc hat mehr als 25.000 PunkteMurdoc hat mehr als 25.000 PunkteMurdoc hat mehr als 25.000 PunkteMurdoc hat mehr als 25.000 PunkteMurdoc hat mehr als 25.000 PunkteMurdoc hat mehr als 25.000 PunkteMurdoc hat mehr als 25.000 PunkteMurdoc hat mehr als 25.000 PunkteMurdoc hat mehr als 25.000 PunkteMurdoc hat mehr als 25.000 Punkte
Murdoc hat mehr als 25.000 PunkteMurdoc hat mehr als 25.000 PunkteMurdoc hat mehr als 25.000 PunkteMurdoc hat mehr als 25.000 Punkte
Registriert seit: Nov 2006
Internet: DSL2 16K
Beiträge: 6.168
Power: 52
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?

MfG Murdoc

Meins: http://murdoc.eu

Geändert von Murdoc (06.05.2012 um 20:47 Uhr).
  Murdoc ist offline   Mit Zitat antworten

Alt 06.05.2012, 21:07   # 9
Mr. Mouse
Kabel Wurm
rot rot rot 
Bewertung:
Mr. Mouse hat die Renommee-Anzeige deaktiviert
Registriert seit: Sep 2006
Internet: >=50Mbit
Beiträge: 962
Power: 21
Themenstarter
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..

- arch-user -

Geändert von terraNova (13.05.2012 um 14:50 Uhr).
  Mr. Mouse ist offline   Mit Zitat antworten

AW: Stringlänge prüfen
Alt 13.05.2012, 14:50   # 10
terraNova
Ehrenmitglied
vip
Bewertung:
terraNova hat mehr als 15.000 PunkteterraNova hat mehr als 15.000 PunkteterraNova hat mehr als 15.000 PunkteterraNova hat mehr als 15.000 PunkteterraNova hat mehr als 15.000 PunkteterraNova hat mehr als 15.000 PunkteterraNova hat mehr als 15.000 PunkteterraNova hat mehr als 15.000 PunkteterraNova hat mehr als 15.000 PunkteterraNova hat mehr als 15.000 Punkte
terraNova hat mehr als 15.000 PunkteterraNova hat mehr als 15.000 PunkteterraNova hat mehr als 15.000 Punkte
Registriert seit: Feb 2007
Beiträge: 1.333
Power: 24
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.

toilet @0.3 (graphics)
toilet - colour based alternative to figlet using libcaca

(23:28) alex2: man ist absolut machtlos gegen diese dummheit
  terraNova ist offline   Mit Zitat antworten

AW: Stringlänge prüfen
Alt 14.05.2012, 13:44   # 11
Mr. Mouse
Kabel Wurm
rot rot rot 
Bewertung:
Mr. Mouse hat die Renommee-Anzeige deaktiviert
Registriert seit: Sep 2006
Internet: >=50Mbit
Beiträge: 962
Power: 21
Themenstarter
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") }

- arch-user -

Geändert von Mr. Mouse (14.05.2012 um 13:48 Uhr).
  Mr. Mouse ist offline   Mit Zitat antworten
Antwort

RR:Board > Computer > Programmierung & Entwicklung > [C/C++] - Stringlänge prüfen


Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir erlaubt, Anhänge anzufügen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

vB Code ist An.
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist Aus.

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[C/C++] - Eingabe prüfen Floppy87 Programmierung & Entwicklung 9 01.12.2010 21:37
Personalausweis Prüfen Cr@ck05 Diskussionen 19 20.01.2010 16:22
Wahrscheinlichkeistrechnung-Bitte Prüfen! giggolo Schule, Studium, Ausbildung 7 31.08.2009 19:06
internet prüfen LiLFreeStyle Netzwerk & Internet 2 30.07.2009 17:54



Alle Zeitangaben in WEZ +1. Es ist jetzt 22:38 Uhr.
vBulletin Copyright ©2000 - 2013, Jelsoft Enterprises Ltd.