Delphi if Verzweigung funktioniert nicht richtig

computerfreaky

Lt. Commander
Registriert
Juni 2008
Beiträge
1.589
Hallo
Also ich hab mir nen Rechner programmeirt, der soll beim Starten fragen ob man eine Multiplikation machen will, oder eine Addition (Multi und Summe)
Code:
program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils;

VAR NBR1, NBR2, SUMME:INTEGER;
VAR NBR3, NBR4, MULTI:INTEGER;
VAR ENTSCHEIDUNG:STRING;
begin
  write('Was willste rechnen?');
  readln(ENTSCHEIDUNG);

 if ENTSCHEIDUNG = 'Summe' then
  write('Erste ziffer');
  readln(NBR1);
  write('Zweite Ziffer');
  readln(NBR2);
  SUMME:=NBR1+NBR2;
  write('Die Summe ist',SUMME);
  readln;

 if ENTSCHEIDUNG = 'Multi' then
  write('Erste Ziffer');
  readln(NBR3);
  write('Zweite Ziffer');
  readln(NBR4);
  MULTI:=NBR3*NBR4;
  write('Multi ist',MULTI);
  readln;

  { TODO -oUser -cConsole Main : placez le code ici }
end.
Jo also wenn ich 'Summe' tippe, dann kann ich auch rechnen, aber er schliesst dann das Programm nicht, und wenn ich 'Multi' eingebe, dann passiert gar nichts, ausser eine schwarze Fenster zu sehen
Kann mir da jmd bitte helfen
THX
 
Das liegt daran, dass du die If-Abfrage bei Summe nur mit "if ... then" benutzt. Dadurch gehört nur die Zeile
"write('Erste ziffer');
zur If-Abfrage, das Programm steht danach bei "
readln(NBR1);" und wartet auf eine Eingabe.

Du musst für deinen Fall folgendes machen:
Code:
If ENTSCHEIDUNG = 'Summe' then begin
...
end

else if ENTSCHEIDUNG = 'Multi' then begin
...
end;
So schließt du die kompletten Befehle in einen Block ein, der zu der jeweiligen Abfrage gehört.
 
Hey
danke das funktioniert gut
Hab mal ne Frage, ist es besser nach dem ersten "if" immer mit "else if" fortzufahren oder einmal "if" dann "else if" und dann wieder "if" dann "else if"?
Bsp:
Code:
if ENTSCHEIDUNG = 'Summe' then
begin
...
end

else if ENTSCHEIDUNG = 'Multi' then
begin
...
end

else if ENTSCHEIDUNG = 'Subtra' then
begin
...
end

else if ENTSCHEIDUNG = 'Divi' then
begin
...
end;
oder
Code:
if ENTSCHEIDUNG = 'Summe' then
begin
...
end

else if ENTSCHEIDUNG = 'Multi' then
begin
...
end;

if ENTSCHEIDUNG = 'Subtra' then
begin
...
end

else if ENTSCHEIDUNG = 'Divi' then
begin
...
end;
Denn bei mir funktionieren beide Methoden, wollte halt wissen was "besser" ist?
 
Ich glaube das macht hier nicht viel aus, welche methode du benutzt,
aber in diesem Fall ist folgende wahrscheinlich die 'elegantere'
Code:
if ENTSCHEIDUNG = 'Summe' then
begin
...
end

else if ENTSCHEIDUNG = 'Multi' then
begin
...
end

else if ENTSCHEIDUNG = 'Subtra' then
begin
...
end

else if ENTSCHEIDUNG = 'Divi' then
begin
...
end;

Der einzige Unterschied besteht darin, dass bei der anderen Methode
Code:
if ENTSCHEIDUNG = 'Subtra' then
begin
...
end

else if ENTSCHEIDUNG = 'Divi' then
begin
...
end;
abgefragt wird, egal, ob ENTSCHEIDUNG schon 'Summe' oder 'Mulit' entsprach.
 
Warum machst du das eigentlich mit if und nicht mit einem switch und dann case-Zweigen (nur interessehalber)?

Gruß,

badday
 
Würde mir das dennoch mal ansehen, würde das ganze auch übersichtlicher machen. (Und würde vielleicht auch die Anzahl deiner Themen im Forum reduzieren... ;) )

Gruß,

badday
 
Zurück
Oben