WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Verständnis zur while-Schleife

 

djanski
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 52
Anmeldedatum: 03.05.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.06.2011, 11:50     Titel: Verständnis zur while-Schleife
  Antworten mit Zitat      
Hey Leute,

ich habe eine kurze Frage zum Verständnis einer while-Schleife die ich programmiert habe. Und zwar möchte ich eine Abfrage starten die nur gewisse Antwortmöglichkeiten zulässt. Diese sieht so aus:
Code:

Abfrage3 = {'Mit welchem Vorschub wurde gefahren? (1 = 3,59 m/min; 2 = 4 m/min ; 3 = 5 m/min; 4 = 6 m/min; 5 = 6,41 m/min'};
Dialogboxtitel3 = 'Abfrage Vorschubgeschwindigkeit';
Antwort3 = inputdlg(Abfrage3, Dialogboxtitel3);
Antwortwert2 = str2double(Antwort3{1});
 

Damit der Benutzer jetzt auch wirklich eine der Antwortmöglichkeiten verwendet wollte ich eine while-Schleife verwenden, die so lange nachfragt, bis die Eingabe korrekt ist. Das sollte so aussehen:
Code:

while Antwortwert2 ~= 1 || 2 || 3 || 4 || 5
    Abfrage3 = {'Das war keine korrekte Eingabe! Nutze eine der Vorgegebenen Antwortmöglichkeiten (1 = 3,59 m/min; 2 = 4 m/min ; 3 = 5 m/min; 4 = 6 m/min; 5 = 6,41 m/min'};
    Dialogboxtitel3 = 'Fehler: Keine gültige Vorschubgeschwindigkeit!';
    Antwort3 = inputdlg(Abfrage3, Dialogboxtitel3);
    Antwortwert2 = str2double(Antwort3{1});
end
 

Das führt jedoch zu einem Loop, der sich auch nicht durch eine korrekte Eingabe beenden lässt.

Kann mir wer sagen, warum das so ist?

Meine bisherige Lösung des Problems erfolgt über den Einbau einer if-Bedingung in die while-Schleife. Das sieht bisher so aus:
Code:

while Antwortwert2 ~= 1 || 2 || 3 || 4 || 5
    Abfrage3 = {'Das war keine korrekte Eingabe! Nutze eine der Vorgegebenen Antwortmöglichkeiten (1 = 3,59 m/min; 2 = 4 m/min ; 3 = 5 m/min; 4 = 6 m/min; 5 = 6,41 m/min'};
    Dialogboxtitel3 = 'Fehler: Keine gültige Vorschubgeschwindigkeit!';
    Antwort3 = inputdlg(Abfrage3, Dialogboxtitel3);
    Antwortwert2 = str2double(Antwort3{1});
    if Antwortwert2 == 1 || 2 || 3 || 4 || 5
        break
    end
end
 
Private Nachricht senden Benutzer-Profile anzeigen


Georg J
Forum-Century

Forum-Century



Beiträge: 113
Anmeldedatum: 22.06.11
Wohnort: ---
Version: R2008a
     Beitrag Verfasst am: 22.06.2011, 12:48     Titel: Dialog
  Antworten mit Zitat      
Hi djanski,

Du hast dich bei der Definition der Bedingung vertan.

Eine Fehlermeldung soll erscheinen, wenn die Eingabe nicht 1, 2, 3, 4 UND NICHT 5 ist. Zu der Verneinung gehört ein UND und kein ODER. In deinem zweiten Beispiel bei der IF-Bedingung hast du die Verneinung weggelassen und ein ODER gesetzt, das sollte auch funktionieren.

Allerdings hab ich deine verkürzte Schreibweise so noch nie gesehen. Bei mir funktioniert sie auch nicht. Da wird nur der erste Wert abgefragt (also die 1), der Rest wird ignoriert. Deshalb schreibe ich es lieber ausführlicher

Ersetze also die while-Zeile durch

Code:
while Antwortwert2 ~= 1 && Antwortwert2 ~=2 && Antwortwert2 ~=3 && Antwortwert2 ~=4 && Antwortwert2 ~=5


Gruss Georg
Private Nachricht senden Benutzer-Profile anzeigen
 
_Peter_
Moderator

Moderator


Beiträge: 537
Anmeldedatum: 08.12.10
Wohnort: ---
Version: 7.10, 2010a
     Beitrag Verfasst am: 22.06.2011, 12:51     Titel:
  Antworten mit Zitat      
Hallo djanski,
du hast einen Denkfehler. Du müsstest das als UND-Verknüpfung definieren.

Allerdings ist folgendes sicher einfacher:
Code:

while Antwortwert2 ~= [1 2 3 4 5]
% oder
while ~ismember(Antwortwert2, [1 2 3 4 5])
% oder
while ~ismember(Antwortwert2, [1 : 5])
 

_________________

Gruß
Peter
_________________
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht? Oder der MATLAB Hilfe?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
Private Nachricht senden Benutzer-Profile anzeigen
 
djanski
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 52
Anmeldedatum: 03.05.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.06.2011, 14:09     Titel:
  Antworten mit Zitat      
Ahh ok! Das ergibt Sinn. Vielen Dank für die schnellen Antworten. Damit ist mein Problem gelöst Smile.
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.