mikrocontroller.net

Forum: Compiler & IDEs Probem in einer for-Schleife


Autor: lisa (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
else
Fehler();
ändern in
else {
    Fehler();
    break;
}
Und bist du dir sicher, dass du die Funktion Richtig 5 mal aufgerufen 
haben möchtest?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
eine andere Möglichkeit
void Testsfunktion(void)
{
     uint8_t Temp[5];
     uint8_t Var;

     int i;
     for( i = 0; i < 5 && Var == Temp[i]; i++ )
       Richtig();

     if( i != 5 )
       Fehler();
}

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Übrigens: wie bekommen denn Var und Temp ihre Werte?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: lisa (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Walter (Gast)
Datum:

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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Flo F (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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();
}

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.