Hilfe bei C Schleife

OP #472065
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
Gast #472076
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
Gast #472077
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...
Gast #472083
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!
Gast #472131
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.
OP #472274
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
Gast #472280
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...

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren