Forum: Mikrocontroller und Digitale Elektronik Hilfe bei C Schleife


von Mirko K. (hagbart)


Lesenswert?

Hallo Zusammen,

habe folgendes Problem und zwar möchte ich mit dem Webserver von Radig 
(Softwareversion 1.4) eine Mail Zeitlich versenden.

Nun habe ich mir folgenden Code überlegt.Er vergleicht die Sek und die 
Minuten mit einander bei ersreichen von 00s und 20min soll er die 
Schleife durchlaufen.

Doch leider über geht er bei erreichen der Zeit die If Schleife.

Woran könnte das liegen?


signed char Zyklus = 10;  //Variable für späteres Schleifenintervall
struct time current_time;
gettime(ActualTime, &current_time);
if ((Mail_Trigger_Enable) && (current_time.second >= 00) && 
(current_time.minute == 19 ) || (current_time.minute == 20 ));
{
if (mail_state == 1)  // Standtart 0 für keinen versand getriggert
{
if (vars.type_int[MAILFLAGS_ADDR] != 0)
{
cli();
printf("MailTrigger\n");
sendmail(packet, 0);
sei();
mail_state = 1;
}
} else     // versand wurde getriggert
{
if (vars.type_int[MAILFLAGS_ADDR] == 0) mail_state = 0;
}
}

Vielen Dank für eure Hilfe Mirko

von andreas kasper (Gast)


Lesenswert?

if ((Mail_Trigger_Enable) && (current_time.second >= 00) &&
(current_time.minute == 19 ) || (current_time.minute == 20 ));

du solltest den ";" nach dem if weggeben

außerdem würde ich die oder-bedingung noch in eine klammer kapseln.

if ((Mail_Trigger_Enable) && (current_time.second >= 00) &&
( ( current_time.minute == 19 ) || (current_time.minute == 20 ) ) )

lg
andi

von Klugscheißer (Gast)


Lesenswert?

Habe mir dein Problem zwar nicht näher angesehen...

Aber was mir auf jeden Fall sofort ins Auge stach
ist diese neue Variante in der Schreibweise von >Standard<

Zitat: "Standtart"

Da schüttelts den Compiler wahrscheinlich genauso wie mich ;-)

Was ist an dem Wort eigentlich so schwierig, dass es in jedem
zweiten Post mit "t" am Ende geschrieben wird?

Nichts für ungut und nicht böse sein...

von fieser, klugscheissender Rahul (Gast)


Lesenswert?

>"Standtart"

Sieht aus wie "Schandtat"...

Es wird komplett ohne "t" geschrieben...

von Klugscheißer 2 (Gast)


Lesenswert?

Es gibt keine If-Schleife.

von fieser, klugscheissender Rahul (Gast)


Lesenswert?

>If Schleife.

Das ist keine Schleife (ausser, wenn man noch ein "goto" irgendwo 
einfügt, das auf den Anfang der ABFRAGE einen Sprung verursacht.)

>if ((Mail_Trigger_Enable) && (current_time.second >= 00) &&
(current_time.minute == 19 ) || (current_time.minute == 20 ));

Da fehlt ein Klammernpaar. Wo, verrate ich aber nicht!

von Andre S. (dg2mmt)


Lesenswert?

Wie der zweite Poster schon schrieb: das ";" nach der if-Bedingung 
beendet die if-Schleife direkt nach der Bedingung, das nachfolgend in 
Klammern gekapselte gehört nicht mehr zum if.

von fieser, klugscheissender Rahul (Gast)


Lesenswert?

>if-Schleife

ABFRAGE! Schleifen haben etwas wiederholendes!

von Andre S. (dg2mmt)


Lesenswert?

hast ja recht. :)

Aber wie heist das dann, was aufgrund der Abfrage ausgeführt wird?

von Karl H. (kbuchegg)


Lesenswert?

Vergleich, Entscheidung, Abfrage.
Such dir was aus.
Das Wesen einer Schleife liegt nun mal darin, dass
Dinge wiederholt werden. Und das ist bei einem if nun
mal nicht der Fall. Ein if wählt einen von 2 möglichen
Programmpfaden aus.

von Dr.Oettker (Gast)


Lesenswert?

> Was ist an dem Wort eigentlich so schwierig, dass es in jedem
> zweiten Post mit "t" am Ende geschrieben wird?

Die Standart kann durch argaiV(*) deutlich verbessert werden.

(*) bitte rumdrehen. Richtig rum lässt mich das Forum die Nachricht 
nicht abschicken.

von Mirko K. (hagbart)


Lesenswert?

Danke ersteinmal für eure Hilfe, (und für die kleine 
Rechtschreibstunde:-))

habe eine elegantere Lösung gefunden.

Und zwar gibt es in der Software Delay Befehle und die habe ich einfach 
eingebaut und siehe da es geht.
Manchmal muss halb etwas genauer hinschauen.

Hier noch mein Code, vielleicht hilft es jemanden weiter:

Kann mir nur noch jemand sagen wie ich da Problem umgehe, daß jedesmal 
wenn ich den Server neueinschalte eine Mail verschickt wird?

if ((Mail_Trigger_Enable) && (CheckDelay_sec(MAIL_Timer)))
      {
        if (mail_state == 0)             {
             if (vars.type_int[MAILFLAGS_ADDR] != 1)
            {

        cli();
           printf("MailTrigger\n,%");
        sendmail(packet, 0);
        sei();
        MAIL_Timer = SetDelay_sec(120);
        mail_state = 1;
            }
           } else     // versand wurde getriggert
           {
          if (vars.type_int[MAILFLAGS_ADDR] == 0) mail_state = 0;
           }
      }

Danke für eure Hilfe Mirko

von fieser, klugscheissender Rahul (Gast)


Lesenswert?

>Kann mir nur noch jemand sagen wie ich da Problem umgehe, daß jedesmal
>wenn ich den Server neueinschalte eine Mail verschickt wird?

Pack deinen Mailversand an den Programmanfang...

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.