Probleme mit If Schleife
-
hallo zusammen,
ich habe ein EDIT_CONTROL mit dem Variablentyp double und dem Variablennamen artikelnummer und ein Button.
Im EDIT_CONTROL habe ich folgendes hinterlegt:
artikelnummer=1;
artikelnummer=2;
artikelnummer=3;
artikelnummer=4;und in dem Button sage ich Ihm jetzt
if (artikelnummer==1) { MessageBox("Artikelnummer gehört zu Artikel 123"); } else if ((artikelnummer==2) { MessageBox("Artikelnummer gehört zu Artikel 456"); } (artikelnummer==3) { MessageBox("Artikelnummer gehört zu Artikel 789"); } (artikelnummer==4) { MessageBox("Artikelnummer gehört zu Artikel 000"); } UpdateData(0);
ein einfaches Programm das nach eingabe der Artikelnummer den Artikelnamen
ausgibt. Nur leider funktioniert es so nicht er nimmt einfach irgendetwas von
den 4 Artikeln. Beim Debuggen springt er zwar in die jeweilige schleife führt
aber dann anschließend die MessageBox nicht aus????hat vielleicht von euch einer eine Idee???????
-
Lieber jimmy0385,
bevor du diesem Irrtum, dass es sich bei einer If-Abfrage um eine Schleife handelt, weiter glauben schenkst, möchte ich dich aufklären:
es gibt keine if-Schleifen!Was du sicher meinst ist eine if-Abfrage.
Als Tipp vorweg - du hast mehrere if-Abfragen, in denen du die Artikelnummer mit einer Konstanten vergleichst. Das schreit doch förmlich nach einer switch-Anweisung. Damit kannst viele Zeilen Code einsparen:
// Switch-Anweisung zum Vereinfachen des Quellcodes switch (artikelnummer) { case 1: // Wenn Artikelnummer gleich 1, führe folgenden Code aus... MessageBox("Artikelnummer gehört zu Artikel 123"); break; // ...und springe ans Ende der switch-Anweisung case 2: MessageBox("Artikelnummer gehört zu Artikel 456"); break; case 3: MessageBox("Artikelnummer gehört zu Artikel 789"); break; case 4: MessageBox("Artikelnummer gehört zu Artikel 000"); break; default: MessageBox("Artikelnummer gehört zu keinem Artikel"); } UpdateData(0);
-
Also da fehlt doch ein bisschen was! Ein paar "else if"s und eine Klammer. Das lässt sich ja gar nicht kompilieren. Ich hab ein Konsolen-Projekt erstellt und die Funktionen MessageBox und UpdateWasWeisIch für die Konsole gebastelt. Und ich kann es nicht kompilieren. Wie schon im vorherigen Beitrag: If-Abfrage, nicht Schleife...
switch nehm ich persönlich nicht gerne, da ich oft das break vergesse(hat mich vor kurzem eine Woche im Interpreterbau zurückgeworfen)
Ich möchte noch sagen: Ich bin kein richtiger MFC-Progger und hab bis jetzt bloß ein paar sinnlose Programme in MFC geschrieben, und das nur in der Buchversion von VC6.0. Jetzt nutze ich nurnoch VCExpress... das kein MFC hat. Schlagt mich nicht wenn ich mich irre...
Jonas
-
so habe es mal probiert, folgende Fehler kommen:
Error C2450 - switch Ausdruck des Typs double nicht zulässig
von welchem Typ muss es den sein??????desweiteren habe ich neugieriger weiße mal probiert einen unterdialog
einzubauen für später und da kommt noch folgender Fehler hinzu:Error C2086 int resp neudefinition
mein code:
[code]
switch (artikelnummer) {case 1:
MessageBox("Artikelnummer gehört zu Artikel 123");
break;
case 2:
MessageBox("Artikelnummer gehört zu Artikel 456");
break;
case 3:
MessageBox("Artikelnummer gehört zu Artikel 789");
break;
case 4:
MessageBox("Artikelnummer gehört zu Artikel 000");
break;
default:
int resp;
unterdialog1.DoModal();
}
UpdateData(0);
-
nutze an stelle des double ein int-wert denn du hast eh nur ganzzahlen, an sonsten solltest du auch in den cases die zahlen als double angeben also 1.0 zum Beispiel.
der fehler Error C2086 int resp neudefinition kommt entweder dadurch das die Variable schon mal irgendwo definiert ist oder duch die Fehlenden geschweiften klammer in default zweig, also so mal versuchen zu schreiben
break; default: { int resp; unterdialog1.DoModal(); } }
-
Es sollte auch mal die Frage gestellt werden, wozu du diese Variable (resp) dort überhaupt deklarierst? Du benutzt sie nicht.
-
so ich hab es gemacht... funktioniert aber leider immer noch nicht
er nimmt immer den ersten wert den ich eingegeben habe z.b. artikelnummer 3 egal was ich danach eingebe es kommt immer die artikelnummer 3 ...code ist wie oben der gleiche
vielleicht noch eine idee??????????????
-
Es ist sehr gefährlich, Deklarationen in einer Switch-Anweisung zu tätigen. Das kann unverhofft zu bösen Fehlern führen.
Mal die Frage: wozu benötigst Du die Variable "resp"? Falls du versuchst, diese nach der Switch-Anweisung zu benutzen, wird dir das nicht gelingen, da auch die Switch-Anweisung ihren eigenen Gültigkeitsbereich hat. (Also innerhalb der Akkoladen.)
-
jimmy0385 schrieb:
er nimmt immer den ersten wert den ich eingegeben habe z.b. artikelnummer 3 egal was ich danach eingebe es kommt immer die artikelnummer 3 ...
Dann wird deine Variable artikelnummer nur beim ersten Mal gesetzt und danach nicht mehr aktualisiert.
-
ich benötige int resp um einen unterdialog zu öffnen den ich brauche...
was kann ich denn da machen ?????nehmen wir an ich nehme meinen code den ich als erstes gepostet habe??????
-
zu isabeau kommentar ja genau richtig..
habs auch schon mit UpdateData(0); probiert aber nichts???????
-
wie währe es wenn du am anfang deiner Routine auch mal UpdateData(TRUE) aufrufst um deine Variablen zu aktualisieren mut den Werten die in den Controlls stehen. un nutze TRUE und FALSE und nicht 0 und 1 wenn MS das mal per define ändert dann kommen bei dir sonderbare sachen raus und du weisst nicht warum. UpdateData ertwartet nun mal er definition ein TRUE oder FALSE und kein 0 oder 1.
Die andere Sache ist das du resp zwar definierst aber doch nicht benutzt, also kann die für den Unterdialog den du ja mit DoModal() aufrufst nicht interessant sein. Sollte unterdialog1 dafür da seinen einstellunge zu verändern, dann lege die entsprechenden variablen in deinem haupanwendung au und schiebe die aktuellen Werten in den unterdialog bzw wenn DoModal() mit IDOK zurück kommt holst du die aktuellen Werte wieder aus den Dialog raus.
-
jo supi vielen dank hat geklappt mit dem UpdateData(TRUE); ich hatte es mit
UpdateData(1); probiert ging aber nicht so gehts vielen dank nochmal......