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

Logische Verknüpfung von Bedingungen in while-Schleife

 

TheMystery
Forum-Newbie

Forum-Newbie


Beiträge: 2
Anmeldedatum: 10.12.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.12.2010, 00:14     Titel: Logische Verknüpfung von Bedingungen in while-Schleife
  Antworten mit Zitat      
Hallo zusammen,

ich habe jetzt ewig rumprobiert, gesucht und gelesen und bin leider immer noch nicht zu einer Lösung gekommen. Jetzt wende ich mich mal vertrauensvoll ans Forum.

Mein Problem ist folgendes:
Ich fordere in einem Programm den Benutzer auf eine Eingabe zu machen mittels input. Allerdings möchte ich bei diese Eingabe nur zwei mögliche Antworten zulassen. Entweder y für Ja oder n für Nein.
Das ganze habe ich jetzt schön in eine while-Schleife verpackt, damit die Eingabezeile immer wieder aufgerufen wird, wenn eine andere Eingabe gemacht wird.

Dies sieht wie folgt aus:
Code:

    while Ask ~= 'y' || Ask ~= 'n'
        Ask = input(['Befindet sich am Knoten ', num2str(i),' ein Lager? (y/n)'],'s');
    end
 


Das i ist nur eine Laufvariable die von 1 bis Knoten n läuft.

Leider scheint es MatLab nicht möglich zu sein eine logische Verknüpfung wie OR oder AND in dieser Schleife durchzuführen. Egal was ich für einen Wert eingebe, er springt immer wieder in die Schleife. Ich weiß nur nicht, ob es an der Tatsache liegt, dass die Variable Ask die Klasse Char 1x1 hat oder generell an der logischen Verknüpfung, wobei ich mir letzteres nicht vorstellen kann, da es weiter oben im Programm funktioniert (hier allerdings mit Zahlen).

Ein Versuch die Buchstaben nach der Eingabe in ihren Ascii-Code zurückzuführen hat leider auch nicht funktioniert. Ich denke mal, dass es mit der Klasse der Variable zu tun hat.

Ein mögliche Lösung wäre natürlich die Buchstaben einfach in eine logische 1 oder 0 zu überführen, wobei ich davon ungern gebrauch machen würde, da ich viele solcher Eingaben habe und dann jedes Mal die Variable wie auf einen Wert ungleich 1 oder 0 setzen müsste um nicht in späteren Abfragen falsche Wert zu erzeugen (ich benutze immer die Variable Ask zur Übergabe der Eingabewert um nicht zich Variablen setzen zu müssen).

Gibt es irgendeine Lösung dies auch mit Buchstaben zu realisieren oder muss ich wirklich jeden Buchstaben nach seiner Eingabe in eine numerischen Wert ändern?

Gruß

Niko

Ok das mit 1 und 0 funktioniert auch nicht. Hab es gerade nochmal probiert er springt trotzdem in die Schleife.
Private Nachricht senden Benutzer-Profile anzeigen


MatLabNooB
Forum-Guru

Forum-Guru


Beiträge: 262
Anmeldedatum: 27.03.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.12.2010, 06:42     Titel:
  Antworten mit Zitat      
vielleicht so?
Code:
while 1
     Ask = input(['Befindet sich am Knoten ', num2str(i),' ein Lager? (y/n)'],'s');
     if strcmp(Ask,'y') || strcmp(Ask,'n')
         break
     end
end

gruß
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 11.12.2010, 10:59     Titel:
  Antworten mit Zitat      
Hallo Niko,

wenn, dann hättest du && nehmen müssen.
Mein konkreter Vorschlag (ein Mix aus deinem und dem von matlabnoob) wäre:

Code:
while ~strcmp(Ask, 'y') && ~strcmp(Ask, 'n')
        Ask = input(['Befindet sich am Knoten ', num2str(i),' ein Lager? (y/n)'],'s');
    end


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
TheMystery
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 2
Anmeldedatum: 10.12.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.12.2010, 22:16     Titel:
  Antworten mit Zitat      
Hmm ja jetzt wo ihr es sagt, fällt mir auf, dass ich da einen logischen Denkfehler hatte ^^

Vielen Dank für die schnelle Antwort 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.