Problem mit if-Abfragen
-
Hallo zusammen.
Ich habe nun erneut ein Problem.
Ich hoffe es wie eben selber lösen zu können, allerdings bin ich mal wieder verzweifelt;)Erstmal mein code.
while (kkk<=10) { kk++; printf("Durchlauf Nr.:%i\n\n",kkk); wert=strtok(NULL,trenner); if (kk=1) { strcpy(lapNr,wert); printf("Wert für kk:%i\n",kk); printf("Wert=%s\n\n",wert); } if (kk=2) { strcpy(lapLen,wert); printf("Wert für kk:%i\n",kk); printf("Wert=%s\n\n",wert); } if (kk=3) { strcpy(lapTimeMS,wert); printf("Wert für kk:%i\n",kk); printf("Wert=%s\n\n",wert); } if (kk=4) { strcpy(lapTime,wert); printf("Wert für kk:%i\n",kk); printf("Wert=%s\n\n",wert); } if (kk=5) { strcpy(speed,wert); printf("Wert für kk:%i\n",kk); printf("Wert=%s\n\n",wert); } if (kk=6) { strcpy(lateralAcc,wert); printf("Wert für kk:%i\n",kk); printf("Wert=%s\n\n",wert); }
Das geht noch bis 16 weiter. Bei 16 werden die diversen Werte in eine Datei geschreiben und "kk"wieder auf 0 gesetzt. Zudem wird "kkk" um eins erhöht.
Ich habe nun folgendes Problem... Wenn ich das ganze laufen lasse, ergibt sich diese Ausgabe:
Durchlauf Nr.:1
Wert für kk:1
Wert=xxWert für kk:2
wert=xxWert für kk:3
wert=xx
.
.
.Durchlauf Nr.:2
Wieso hüptf das Programm hier in jede "if"-Abfrage rein, obwohl sich "kk" eigendlich nicht erhöhen dürfte? Zudem zeigt die Ausgabe, das sich kk jedes mal erhöht, Wieso? Wo hab ich da den fehler drin? Ich versteh das nicht so richtigDanke schonmal für die Hilfe
-
Du hast einen typischen Anfängerfehler drinne:
kk = 1
ist eine Zuweisung und weist der Variablekk
den Wert1
zu.
Um einen Vergleich durchzuführen musst du==
nutzen.Richtig wäre also:
if (kk == 1) // Vergleich mit == { // ... }
Außerdem solltest du dir mal
switch
ansehen:switch (kk) { case 1: strcpy(lapNr,wert); printf("Wert für kk:%i\n",kk); printf("Wert=%s\n\n",wert); break; case 2: strcpy(lapLen,wert); printf("Wert für kk:%i\n",kk); printf("Wert=%s\n\n",wert); break; //... }
-
Weil = eine Zuweisung ist.
Der Vergleich ist in C ==if (kk==1)
-
khjkjhk schrieb:
Außerdem solltest du dir mal
switch
ansehen:switch (kk) { case 1: strcpy(lapNr,wert); printf("Wert für kk:%i\n",kk); printf("Wert=%s\n\n",wert); break; case 2: strcpy(lapLen,wert); printf("Wert für kk:%i\n",kk); printf("Wert=%s\n\n",wert); break; //... }
Und nicht alles 16 mal schreiben:
char *p; switch (kk) { case 1: p = lapNr; break; case 2: p = lapLen; break; //... } strcpy(p,wert); printf("Wert für kk:%i\n",kk); printf("Wert=%s\n\n",wert);
Oder so ähnlich.
-
Argh... was für ein dummer Fehler
Jetzt wo du es sagst springt es mir auch direkt ins Auge.
Nagut dann danke erstmal.Und nun zu dem Case.
Wie genau funktioniert das denn? Sagt mir nämlich gar nichtsWürde er sich in dem von dir gezigten Beispiel die Zahl hinter dem Case als Bedingung für das kk nehmen und dann den jeweiligen fall bearbeiten oder wie?
Und wenn er das tut, wo ist dann der Unterschied zu if ?
Auch hier schonmal danke für die hilfe
-
Anstatt
if (k == 1)
{
}
else if (k == 2)
{
}kann man schreiben:
switch (k)
{
case 1: // Code
break;case 2: // Code
break;// ...
}Ist einfach bequemer und lesbarer.
-
fghfgh schrieb:
Ist einfach bequemer und lesbarer.
Vielleicht gibt's den
switch
aber auch, weil es leichter ist, daraus schnellen Code zu erzeugen.
-
bei if sind sowohl ungleichheit, größer, kleiner etc. überprüfbar, bei
switch wird lediglich auf gleichheit geprüft.dadurch dass du bei jeder überprüfung das gleiche machst (oder hab ich mich
verlesen?) so reicht doch ein einziges if...sprich:
if (kk >= MIN_VALUE && kk <= MAX_VALUE) { strcpy(lapNr,wert); printf("Wert für kk:%i\n",kk); printf("Wert=%s\n\n",wert); }
da ist sogar ein switch unnötig...
-
itedvo schrieb:
bei if sind sowohl ungleichheit, größer, kleiner etc. überprüfbar, bei
switch wird lediglich auf gleichheit geprüft.Und zwar auf Gleichheit mit einem zur Compilezeit bekannten Wert.
itedvo schrieb:
dadurch dass du bei jeder überprüfung das gleiche machst (oder hab ich mich
verlesen?)Ja, leider. Das Ziel von strcpy() ändert sich mit den Werten.
-
mngbd schrieb:
itedvo schrieb:
bei if sind sowohl ungleichheit, größer, kleiner etc. überprüfbar, bei
switch wird lediglich auf gleichheit geprüft.Und zwar auf Gleichheit mit einem zur Compilezeit bekannten Wert.
itedvo schrieb:
dadurch dass du bei jeder überprüfung das gleiche machst (oder hab ich mich
verlesen?)Ja, leider. Das Ziel von strcpy() ändert sich mit den Werten.
mit strtok() hab ich jetzt noch nicht gearbeitet, da ich mir nämlich vorgenommen
habe die standard-funktionen, bevor ich sie verwende, versuche nach zu progra-
mmieren. weil was ich nicht verstehe wie es ungefär funktioniert, ist für mich
nur mit mulmigem gefühl zu verwenden. weiß nich wieso, is aber so. vieleicht
weil ich mir dann so unwissend vorkomme wenn ich was verwende von dessen
aufbau ich keine ahnung habe. weiteres ist es hilfreich wenn man sich eigene
algorithmen für sowas ausarbeitet, da man aus solchen algorithmen vieleicht
schnittpunkte für andere probleme findet und sich leichter tut andere probleme
einfacher anzugehen.aber bin jetzt vom thema abgekommen, was für eine aufgabe erledigt strtok()?
gruß
ITEDVO
-
itedvo schrieb:
weil was ich nicht verstehe wie es ungefär funktioniert, ist für mich
nur mit mulmigem gefühl zu verwenden. weiß nich wieso, is aber so.Das ist gesunde Skepsis. Die Standardbib. ist aber sinnvoll und nützlich, mit Ausnahme von Altlasten wie gets().
itedvo schrieb:
aber bin jetzt vom thema abgekommen, was für eine aufgabe erledigt strtok()?
man: strtok liefert nacheinander die Tokens in einem String (oder so ähnlich). Aber strtok() kam hier bis jetzt gar nicht vor, meintest du strcpy()?
-
ach wieder verlesen, ich sollte echt nicht wärend der ausbildung im forum
rumgammeln =b vorallem nicht wärend dem wir Wirtschaft und Recht haben, mein
fehler... hab erst jetzt gesehen das ja bei strcpy() verschiedene werte
übergeben werden. ich dachte vorher das liegt am strtok()... aber jetzt weiß
ichs besser...ach so, das hab ich eh mal selber ausprogrammiert, nur wusste ich damals nicht,
dass es so eine standard funktion gibt.
ich verwende schon standard funktionen, da sie praktischer sind und vorallem
sicherlich keine fehler beinhalten und falls schon sich sicher wer dran macht
und diese ausbessert. doch bevor ich eben solche funktionen verwende gehts bei
mir so gut wie immer ans selber ausprogrammieren, hilft fürs verständniss =bso muss jetzt, der Professor guckt wieder so böse, der hat sicherlich nen Test
vorbereitet.
-
if-Abfragen sind immer sinnvoll für reine true/false Situationen. Für das beschriebene Beispiel sind switch-case-Konstrukte geeigneter.