Funktion so richtig ?



  • 😕



  • 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.html

    Ob 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ß
    Don06

    autsch 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 Eingabe
    

    Gruß
    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


Anmelden zum Antworten