PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : verschachtelte schleifen



Weiti
31.10.2007, 10:12
sind verschachtelte schleifen nicht möglich? oder habe ich irgentwas falsch gemacht?


#include "asuro.h"


int main(void) {

int RWD=0;
int a=1;
Init();
while(a=1) {

if (RWD=0) {

while (PollSwitch()==0) {
BackLED(OFF,OFF);
MotorDir(FWD,FWD);
MotorSpeed(120,120);
}
while (PollSwitch()>0){
BackLED(ON,ON);
RWD=1;
}
}

else if (RWD=1) {

while (PollSwitch()==0) {
BackLED(ON,ON);
MotorDir(RWD,RWD);
MotorSpeed(120,120);
}
while (PollSwitch()>0){
BackLED(OFF,OFF);
RWD=0;
}
}
}
}

farratt
31.10.2007, 10:23
Möglicherweise liegt es daran, dass du in der 8. Zeile while(a=1) geschrieben hast. Es muss aber while(a==1) heißen.
Grundsätzlich sind verschachtelte Schleifen kein Problem.

Gruß farratt

p_mork
31.10.2007, 12:47
Es sollte außerdem if (RWD==0) anstatt if (RWD=0) heißen. das Gleichheitszeichen ist in C der Zuweisungsoperator.

MfG Mark

Weiti
31.10.2007, 13:07
ahh, klar! bin noch ein bischen an Delphi gewöhnt!

Trotzdem gibt es im Programmers Notepad noch folgende Fehler, die ich nicht ganz verstehe:

test.c: In function `main':
test.c:6: error: parse error before numeric constant
test.c:20: error: invalid lvalue in assignment
test.c:33: warning: statement with no effect

damaltor
31.10.2007, 13:10
RWD ist ein bereits definerter wert, du kannst ihn nicht als variable verwenden. die zeile 6 entspeicht etwa "int 1=2", du kannst aber keiner zahl eine zahl zuweisen. benenne die variable um.

gleiches gilt in den beiden anderen zeilen.

Weiti
31.10.2007, 13:27
warum geht das nicht? ich kenne es aus anderen programmiersprachen so, das man einer Integer-variablen beim deklariren einen wert zuweißt und diesen dann später überschreibt.

int i=0; //i hat wert 0
i=2; // jetzt hat i den wert 2

warum kann ich RWD nicht als Variable verwenden? Es ist doch eine, solange ich sie anfangs als int deklariere und nicht als #define...

fehler in c:33 behiben, ein gleichheitszeichen zuviel :)

CsT
31.10.2007, 13:58
Aber RWD wurde bereits irgendwo anders deklariert bzw. hier besser gesagt mit #define RWD blabla eine Konstante erzeugt. Du kannst also in deinem Programm kein Integer mehr deklarieren, der RWD heißt. Benenne die Variable also einfach um und du wirst kein Problem mehr haben. Dein restliches Programm hab ich mir jetzt nicht angeschaut, wenn es immer noch nicht klappen sollte, stelle bitte nochmal das bis dahin berichtigte Programm online.

Viele Grüße
CsT

Weiti
31.10.2007, 14:16
#include "asuro.h"


int main(void) {

int RWD=0;
int a=1;
Init();
while(a==1) {

if (RWD==0) {

while (PollSwitch()==0) {
BackLED(OFF,OFF);
MotorDir(FWD,FWD);
MotorSpeed(120,120);
}
while (PollSwitch()>0){
BackLED(ON,ON);
RWD=1;
}
}

else if (RWD==1) {

while (PollSwitch()==0) {
BackLED(ON,ON);
MotorDir(RWD,RWD);
MotorSpeed(120,120);
}
while (PollSwitch()>0){
BackLED(OFF,OFF);
RWD=0;
}
}
return(0);}

}
#

kein define...

liggi
31.10.2007, 14:24
In der Asuro.c und h ist aber RWD schon als define bestimmt.

mfg liggi

Weiti
31.10.2007, 14:28
ahhhh, jezt verstehe ich! Danke!

so, programm geflasht. leider passiert beim drücken der tasten nichts.
ich hoffe das wird im passenden thema noch geklärt.


#include "asuro.h"


int main(void) {

int RW=0;
int a=1;
Init();
while(a==1) {

if (RW==0) {

while (PollSwitch()==0) {
BackLED(OFF,OFF);
MotorDir(FWD,FWD);
MotorSpeed(120,120);
}
while (PollSwitch()>0){
BackLED(ON,ON);
RW=1;
}
}

else if (RW==1) {

while (PollSwitch()==0) {
BackLED(ON,ON);
MotorDir(RWD,RWD);
MotorSpeed(120,120);
}
while (PollSwitch()>0){
BackLED(OFF,OFF);
RW=0;
}
}
return(0);}

}

p_mork
31.10.2007, 14:54
Deine while-Schleife wird nur einmal durchlaufen, weil am Ende des Blocks ein return 0 steht. Ändere das.

MfG Mark

Weiti
31.10.2007, 15:02
ok, gemacht. jetzt geht beim kollidieren das licht aus, aber bei weiteren zusammenstößen nicht jedesmal wieder an

damaltor
31.10.2007, 16:58
das ist der große unterschied: eine VARIABLE kann jederzeit verändert werden.
ein DEFINE jedoch wird -wie der name sagt- definiert. er lässt sich nie wieder ändern.