Funktion so richtig ?
-
Hallo, da mir ja doch in den letzten tagen oft gesagt wurde ich sollte mal funktionen und parameter mir besser anschauen, habe ich es mal "versucht" und hoffe es zumindest auf diese funktion richtig angewand. Würde gerne von euch hören ob es so richtig ist oder ob ich da doch noch nachholbedarf habe ?
//***** 6stellige eingabe pruefen auf NUR Zahlen ***** bool eingabecheck( char eingabe[7] ) { int stellenOK = 0; for (int i = 0; i < 7; i++) { if (isdigit(eingabe[i])) {stellenOK++;} } if (stellenOK == 6){mvwaddstr(wjalouschalt, 10, 15, " ALLES OK");return false;} else {mvwaddstr(wjalouschalt, 10, 15, " FALSCH !!!!");return true;} }//***** JalouschaltzeitenVariablen ***** class Jalousieschaltzeiten { public: char // jalouzeiten [128][7]; void jalousiezeiten(); }; void Jalousieschaltzeiten::jalousiezeiten(void) { echo(); while (eingabecheck(jalouzeiten[0])) { mvwgetnstr(wjalouschalt, 1, 20, jalouzeiten[0], 6); eingabecheck(jalouzeiten[0]); } noecho(); }es ist noch nicht ganz fertig,z.b wird beim fehler die zeile für wgetnstr noch nicht gelöscht bzw überschrieben. Aber das was es machen soll, macht es auch.
Aber ich taste mich langsam ran

Ziehl ist es das die funkton eingabecheck jedesmal die jalouzeiten eingabe überprüft und diese dann jeweils abspeichert. Bis zu 128 stk. (wlche zeit whon gehört soll später noch zugeordnet werden)
höre gerne eure meinung aber bitte nicht an die wand stellen bin noch zu neu dafür

-
hat sich erledigt.
-

-
habs
-
ich fass das mal auf als wäre die funktion ok 
wenn nicht dann melden sonst Danke
-
also ich weiß jetzt nich so genau, was du mit dem code bezwecken willst, aber hier mal was mit auffällt:
- Du benutzt Klassen, also benutz doch bitte auch std::string und nciht char* bzw. char[] um Zeichenketten zu speichern.
if (stellenOK == 6){mvwaddstr(wjalouschalt, 10, 15, " ALLES OK");return false;} else {mvwaddstr(wjalouschalt, 10, 15, " FALSCH !!!!");return true;}Was ist hier wjaouschalt? Sieht wie eine globale Variable aus. Die gehört auf keinen Fall benutzt in einer Funktion, die nur eine Eingabe prüfen soll. Durch prüfen sollte sich nichts außem rum verändern. Die aufrufende Funktion sollte dann entscheiden was gemacht wird, nicht schon in der prüfung eine fehlermeldung oder so generieren.
außerdem:
"alles ok" -> return false? extra so oder falsch rum?was sind das eigentlcih für komische funktionen mit mvw als prefix und so?
-
Also deine Codeeinrückungen sind aber interessant

Geht noch etwas klarer:bool isNumber(char eingabe[7]) { for (int i = 0; i < 7; i++) { if (! isdigit(eingabe[i])) return false; } return false; } // und dann die Schleife: do { mvwgetnstr(wjalouschalt, 1, 20, jalouzeiten[0], 6); } while (! isNumber(jalouzeiten[0]);P.S.: notlogged ist ein Troll, den solltest du einfach ignorieren.
Gruß
Don06
-
wjalouschalt ist das Fenster von ncurses aus, die Aussagen ob ALLES OK oder FALSCH kommen da noch wieder raus, es war nur zum testen bzw das ich sehe was er macht.
Die funktin Jalousieschaltzeiten soll noch weiter ausgebaut werden z.b, es mus ja noch geprüft werden das die zahl zwischen 000000 und 235959 liegt (uhrzeit ohne : )
und in datei Zeiten.txt abspeichern.Dann wollte ich eigentlich die chars noch umwandeln in int das ich sie im weiteren programm einfach mit if anweisungen vergleichen kann. Hatte hier schon mal den ganzen code gesetzt
http://www.c-plusplus.net/forum/viewtopic-var-t-is-205658.htmlOb nu meine gedankengänge ganz richtig sind weis ich nicht *g*
-
Brusko schrieb:
Die funktin Jalousieschaltzeiten soll noch weiter ausgebaut werden z.b, es mus ja noch geprüft werden das die zahl zwischen 000000 und 235959 liegt (uhrzeit ohne : )
Dir ist schon klar, dass das so nicht funktioniert? Was wäre denn 199999 dann für eine Uhrzeit, 19:99:99 Uhr? Da musst du dir schon was besseres einfallen lassen
oder du benutzt die Standard-Lösung time_t aus <ctime>.Gruß
Don06
-
Maxi schrieb:
"alles ok" -> return false? extra so oder falsch rum?
die whileschleife wird doch solange ausgeführt wie true ansteht und bei falshe verlassen.
Also solange die eingabe fasch ist, wird true geliefert um die schleife zu wiederholen
ist sicherlich nicht perfekt
aber wie gesagt bin ja noch ein neuer
-
Don06 schrieb:
Brusko schrieb:
Die funktin Jalousieschaltzeiten soll noch weiter ausgebaut werden z.b, es mus ja noch geprüft werden das die zahl zwischen 000000 und 235959 liegt (uhrzeit ohne : )
Dir ist schon klar, dass das so nicht funktioniert? Was wäre denn 199999 dann für eine Uhrzeit, 19:99:99 Uhr? Da musst du dir schon was besseres einfallen lassen
oder du benutzt die Standard-Lösung time_t aus <ctime>.Gruß
Don06autsch stimmt da habe ich nicht dran gedacht
dat schmeist mich ja jetzt wieder zurück aber gut das ich das jetzt weis .ich könnt ja evtl jede stelle jetzt überprüfen das sie nicht höger als 5 ist (z.b die 3 stelle) oder 2 die erste stelle
-
Naja, viel einfacher: du speicherst einfach die Anzahl der Sekunden seit 00:00 Uhr. Ein Tag hat 24 * 60 * 60 = 86400 Sekunden. Und dann kannst du die Zeit berechnen:
// time ist eine Variable für die Zeit sec = time % 60; min = (time / 60) % 60; hours = (time / 60 / 60);Bei der Eingabe musst du natürlich so eine Überprüfung machen. Da solltest du aber auch mit Funktionen arbeiten, ist dann klarer, was du machst:
if (isValidTime(hours, mins, secs)) // Gültige EingabeGruß
Don06
-
Nun , ich glaub da laufen meine gedankengänge anders
hatte es nun so ://***** 6stellige eingabe pruefen auf NUR Zahlen und gueltige uhrzeit***** bool eingabecheck( char eingabe[7] ) { int anzahlOK = 0, stelleOK = 50; for (int i = 0; i < 7; i++) { if (isdigit(eingabe[i])) { if (eingabe[i] <= stelleOK) { if (i == 0) {stelleOK = 51; anzahlOK++;} else if ((i == 1)|(i == 3)) {stelleOK = 53; anzahlOK++;} else if ((i == 2)|(i == 4)) {stelleOK = 57; anzahlOK++;} else if (i == 5) {anzahlOK++;} } } } if (anzahlOK == 6) {return false;} else {return true;} }gelöst
was spricht dagegen ?? die mvwaddstr(win) kommen natürlich noch alle wieder raus
aber wenn ich nu richtig liege kannste z.b nicht 236959 eingeben
edit: code aufgeräumt wie er jetzt ist