Forum: Compiler & IDEs Probem in einer for-Schleife


von lisa (Gast)


Lesenswert?

Hallo,
ich habe folgende Funktion definiert.

void Testsfunktion(void)
{
     uint8_t Temp[5];
     uint8_t Var;
     for(int i=0;i<5;i++){

           if(Var==(Temp[i])){
           Richtig();
           }
           else
           Fehler();
    }
}

Die Funktion Fehler ist jedesmal aufgerufen, wenn beim Durchlauf die 
Ungleichheit getroffen ist. Aber ich möchte diese Funktion nur einmal 
aufrufen, wenn nach dem Durchlauf von i=0 bis 4 die Gleiheit nicht 
getroffen wird.
Bitte kann jemanden mir helfen?

von Stefan E. (sternst)


Lesenswert?

1
else
2
Fehler();
ändern in
1
else {
2
    Fehler();
3
    break;
4
}
Und bist du dir sicher, dass du die Funktion Richtig 5 mal aufgerufen 
haben möchtest?

von Karl H. (kbuchegg)


Lesenswert?

eine andere Möglichkeit
1
void Testsfunktion(void)
2
{
3
     uint8_t Temp[5];
4
     uint8_t Var;
5
6
     int i;
7
     for( i = 0; i < 5 && Var == Temp[i]; i++ )
8
       Richtig();
9
10
     if( i != 5 )
11
       Fehler();
12
}

von Stefan E. (sternst)


Lesenswert?

Übrigens: wie bekommen denn Var und Temp ihre Werte?

von Karl H. (kbuchegg)


Lesenswert?

Stefan Ernst wrote:
> Übrigens: wie bekommen denn Var und Temp ihre Werte?

Die Frage ist denk ich aus dem Zusammenhang gerissen worden, zwischen 
den Variablen Definitionen und der Auswertung dürfte Code fehlen. 
Wahrscheinlich sowas wie eine Fragebogenauswertung, bei der nach der 
ersten falschen Antwort schon abgebrochen wird.

von lisa (Gast)


Lesenswert?

Hallo,
ich habe korrigiert aber es klappt nicht wie ich mir wünscht,vielleicht 
habe ich mich falsch ausgedrückt.
Mit dem ersten Programm ist die Funktion Fehler jedesmal aufgerufen, 
wenn die ungleichheit gefunden wird.
Beispiel 1:
Var= 0X02;
Temp[0]= 0x01;
Temp[1]= 0X02;
Temp[2]= 0X03;
Temp[3]= 0x04;
Temp[4]= 0x05;
Die Funktion Fehler ist 4 mal aufgerufen

Beispiel 2:
Var=0x06;
Temp[0]= 0x01;
Temp[1]= 0X02;
Temp[2]= 0X03;
Temp[3]= 0x04;
Temp[4]= 0x05;
Die Funktion Fehler ist 6 mal aufgerufen. Ich möchte, dass die Funktion 
nur einmal aufgerufen, wenn beim Durchlauf gar keine Gleichheit 
getroffen ist.Und nicht wenn jedesmal die Ungleicheit getroffen ist.

danke

von Walter (Gast)


Lesenswert?

dann nimm doch die Funktion von Karlheinz,
da wird fehler() nur einmal aufgerufen

von Karl H. (kbuchegg)


Lesenswert?

> ich habe korrigiert aber es klappt nicht wie ich mir wünscht,vielleicht
> habe ich mich falsch ausgedrückt.

Dann zeig doch bitte mal, was du jetzt hast.
Soll ja schon vorgekommen sein, dass jemand bei einer Korrektur selbst 
wieder einen Fehler eingebaut hat.
So Top Secret wird dein Programm ja wohl nicht sein.

von Flo F (Gast)


Lesenswert?

Du willst also Pruefen, ob sie alle False (Ungleich) sind?

void Testsfunktion(void)
{
     uint8_t Temp[5];
     uint8_t Var;
     uint8_t alleUngleich = 1;
     for(int i=0;i<5;i++){

           if(Var==(Temp[i])){
           alleUngleich = 0;
           }
    }
    if (alleUngleich)
     Falsch();
}

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.