![]() |
If Anweisung... Block?
Hallo Leute,
Ich habe gerade in kleines Programm geschrieben, nun ist meine Frage wie man eine If Anweisung blocken kann? Also ich hab mehrere If Anweisungen und möchte die so zusammen schachteln das wenn ich eine else anweisung einbaue er alle if anweisung durch geht und nicht nur die letzte! Hättet ihr da Tipps für mich? mit einer schleife vielleicht? meine 2. frage wäre dann gewesen, wie ich machen kann, dass sich der user am ende vom prog. raussuchen kann ob er erneut etwas rechnen will...! Wie kann ich machen, dass er dann die ganzen vorherigen if anweisungen wieder nachfrägt? Es ist eine Konsolen Anwendung... MfG und danke im voraus GG |
Re: If Anweisung... Block?
Ich glaube Du solltest erstmal ein bisschen Code posten, damit wir sehen was genau Du machen willst.
Uwe |
Re: If Anweisung... Block?
Hi,
zur Frage2 glaube ich zu wissen was gemeint ist, (hatte so in der Art meine ersten Turbo-Pascal-Programme geschrieben), also eine "Hauptschleife" im Programm. Beispielsweise als PseudoCode:
Delphi-Quellcode:
Oder bin ich auf dem Holzweg (GlaskugelModus Off)?
ProgrammStart
Repeat if dieses then jenes; Sonstiges(wasWeissIch); Rechne; ZeigeErgebnis; write('Nochmal? (J/N)); Taste := ReadKey; Until (Taste = N); End; Gruß, MJ |
Re: If Anweisung... Block?
Delphi-Quellcode:
da will ich jetzt ne else anweisung einbauen und dann unten nochmals eine abfrage...
if ein = 'Profikiller' then pun:=anz*176;
if ein = 'Objektwache' then pun:=anz*21; if ein = 'Guarde' then pun:=anz*388; if ein = 'Problemloeser' then pun:=anz*93; if ein = 'Bombenleger' then pun:=anz*281; writeln; writeln; writeln ('Hier die Gesamtpunktzahl:'); writeln (pun); mfg |
Re: If Anweisung... Block?
Delphi-Quellcode:
Suchst du das? :gruebel:
if ein = 'Profikiller' then pun:=anz*176
else if ein = 'Objektwache' then pun:=anz*21 else if ein = 'Guarde' then pun:=anz*388 else if ein = 'Problemloeser' then pun:=anz*93 else if ein = 'Bombenleger' then pun:=anz*281 else pun:=0; writeln; writeln; writeln ('Hier die Gesamtpunktzahl:'); writeln (pun); |
Re: If Anweisung... Block?
Also alle if Schleifen abarbeiten tut es ja schon, die else Anweisung sehe ich allerdings nicht.
Denke aber Du benötigst dden Code aus Jessicas Glaskugel. Uwe |
Re: If Anweisung... Block?
Habe das jetzt mal probiert wie es inherited gesagt hat, hier ist mein kompletter quellcode... allerdings funkz das prog jetzt nicht mehr da er jetzt am ende immer 0 hinschreibt... Was kann ich dagegen machen und wie würde das mit dem repeat innerhalb dieses quellcodes aussehen?
Delphi-Quellcode:
program Einheiten;
{$APPTYPE CONSOLE} uses SysUtils; var ein :string; anz, pun : integer; begin writeln ('Vendetta - Einheitenpunktezaehler'); writeln ('Bitte gebe den Namen der Einheit an (Bitte in Vokalen, z. B. Soeldner):'); readln (ein); writeln ('Bitte gebe Die Anzahl der Einheiten an:'); readln (anz); if ein = 'Schlaeger' then pun:=anz*6; if ein = 'Messerstecher' then pun:=anz*4; if ein = 'Tuersteher' then pun:=anz*6; if ein = 'Revolverheld' then pun:=anz*21; if ein = 'Besetzungstruppe' then pun:=anz*251; if ein = 'Spion' then pun:=anz*3; if ein = 'Moebelpacker' then pun:=anz*9; if ein = 'CIA Agent' then pun:=anz*87; if ein = 'FBI Agent' then pun:=anz*48; if ein = '´Transporteur' then pun:=anz*51; if ein = 'Ninja' then pun:=anz*236; if ein = 'Scharfschuetze' then pun:=anz*28; if ein = 'Soeldner' then pun:=anz*1176; if ein = '`Schwarzgeldarbeiter' then pun:=anz*4; if ein = 'Bodyguard' then pun:=anz*43; if ein = 'Polizist' then pun:=anz*54; if ein = 'Profikiller' then pun:=anz*176; if ein = 'Objektwache' then pun:=anz*21; if ein = 'Guarde' then pun:=anz*388; if ein = 'Problemlöser' then pun:=anz*93; if ein = 'Bombenleger' then pun:=anz*281 else pun:=0; writeln; writeln; if pun = 0 then writeln ('Die Einheit wurde leider nicht gefunden') else writeln ('Hier die Gesamtpunktzahl:'); writeln (pun); writeln; writeln; writeln; readln; end. |
Re: If Anweisung... Block?
Hi,
immer 0 ist klar, wenn du nicht den letzten nimmst:
Delphi-Quellcode:
Du kannst vorher Eingeben was du möchtest, am Schluss wird immer obiges ausgewertet.
if ein = 'Bombenleger' then pun:=anz*281
else pun:=0; Schau dir "else if" an. Gruß, MJ |
Re: If Anweisung... Block?
Neinein, du hast da was übersehen, da muss überall ein else vor.
€dit: das Problem mit dem direkt-einloggen und dem Roten Kasten gibt es offenbar immer noch, oder er ist grad in einer Schneeballschlacht^^ |
Re: If Anweisung... Block?
Zitat:
MJ |
Re: If Anweisung... Block?
danke, hab den quelltext jetzt nochmal editiert, aber wie kann ich das jetzt mit dem repeat machen? könnte mir es vielleicht mal jemand in den quellcode einfügen sowie es sein muss? danke im voraus :)
Delphi-Quellcode:
program Vendetta;
{$APPTYPE CONSOLE} uses SysUtils; var ein : string; anz, pun : integer; begin writeln ('Vendetta - Einheitenpunktezaehler'); writeln ('Bitte gebe den Namen der Einheit an (Bitte in Vokalen, z. B. Soeldner):'); readln (ein); writeln ('Bitte gebe Die Anzahl der Einheiten an:'); readln (anz); if ein = 'Schlaeger' then pun:=anz*6 else if ein = 'Messerstecher' then pun:=anz*4 else if ein = 'Tuersteher' then pun:=anz*6 else if ein = 'Revolverheld' then pun:=anz*21 else if ein = 'Besetzungstruppe' then pun:=anz*251 else if ein = 'Spion' then pun:=anz*3 else if ein = 'Moebelpacker' then pun:=anz*9 else if ein = 'CIA Agent' then pun:=anz*87 else if ein = 'FBI Agent' then pun:=anz*48 else if ein = '´Transporteur' then pun:=anz*51 else if ein = 'Ninja' then pun:=anz*236 else if ein = 'Scharfschuetze' then pun:=anz*28 else if ein = 'Soeldner' then pun:=anz*1176 else if ein = '`Schwarzgeldarbeiter' then pun:=anz*4 else if ein = 'Bodyguard' then pun:=anz*43 else if ein = 'Polizist' then pun:=anz*54 else if ein = 'Profikiller' then pun:=anz*176 else if ein = 'Objektwache' then pun:=anz*21 else if ein = 'Guarde' then pun:=anz*388 else if ein = 'Problemlöser' then pun:=anz*93 else if ein = 'Bombenleger' then pun:=anz*281 else pun:=0; writeln; writeln; if pun = 0 then writeln ('Die Einheit wurde leider nicht gefunden') else writeln ('Die Gesamtpunktzahl betraegt: ',pun,' '); writeln; writeln; writeln; readln; end. |
Re: If Anweisung... Block?
Und klappt?
So in etwa:
Delphi-Quellcode:
Es gab dochmal unter Pascal7.0 eine Funktion, die auf eine Tasteneingabe direkt reagierte.
var
... c : string; begin repeat writeln ('Vendetta - Einheitenpunktezaehler'); writeln ('Bitte gebe den Namen der Einheit an (Bitte in Vokalen, z. B. Soeldner): '); readln (ein); write ('Bitte gebe die Anzahl der Einheiten an: '); readln (anz); if ein = 'Schlaeger' then pun:=anz*6 // ... else if ein = 'Bollermann' then pun:=anz*281 else pun:=0; writeln; writeln; if pun = 0 then writeln ('Die Einheit wurde leider nicht gefunden') else write ('Hier die Gesamtpunktzahl:'); write (pun); writeln; write('Nochmal (j/n): '); readln(c); writeln; until (c = 'n'); end. (ohne Enter drücken zu müssen) Ich komme ich im Moment nicht darauf. Keypressed? ReadChar? (in der Unit CRT?) MJ |
Re: If Anweisung... Block?
ReadKey ...
|
Re: If Anweisung... Block?
Aha, danke :)
Mein Delphi4 zickt rum und will readkey nicht. :( Unit? Gruß, MJ |
Re: If Anweisung... Block?
Auch wenns schon gelöst wurde:
Dein Problem bestand darin: Zitat:
Dann hast du das gemacht: Zitat:
Der letzte war dann richtig: Zitat:
Ist es "Messerstecher"? Nein, also was soll er ansonsten machen: ... Ist es "Bombenleger"? Nein, also was soll er ansonsten machen: "pun" soll "0" sein ;) PS: Ich hasse es, wenn man den Code der dahinter steckt nicht versteht, weil dann steht man in null komma nichts wieder auf der Matte (obwohl das Problem ähnlich ist) |
Re: If Anweisung... Block?
Hallo MJ,
wir missverstehen uns. Ich wollte dir nur den Namen der Funktion aus DOS-Zeiten in Erinnerung rufen. Unter Win32 musst du für solche Dinge ReadConsoleInput() benutzen. Freundliche Grüße PS: Falls es gebraucht wird...
Delphi-Quellcode:
var
hStdIn: THandle; function ReadKey: Char; var ir: TInputRecord; evtCount: Cardinal; begin Result := #0; repeat ReadConsoleInput(hStdIn, ir, 1, evtCount); if (evtCount = 1) and (ir.EventType = 1) and (ir.Event.KeyEvent.bKeyDown) and (ir.Event.KeyEvent.AsciiChar <> #0) then Result := ir.Event.KeyEvent.AsciiChar; until Result <> #0; end; var c: Char; begin hSTDIN := GetStdHandle(STD_INPUT_HANDLE); repeat c := ReadKey; Write(c); until c = #27; end; |
Re: If Anweisung... Block?
Also wenn ich es richtig verstehe brauchst Du überhaupt keine else Anweisung,
Du solltest lediglich deine Variable pun initialisieren.
Delphi-Quellcode:
Macht doch Sinn, oder?
var
ein : string; anz, pun : integer; begin pun := 0; writeln ('Vendetta - Einheitenpunktezaehler'); writeln ('Bitte gebe den Namen der Einheit an (Bitte in Vokalen, z. B. Soeldner):'); readln (ein); writeln ('Bitte gebe Die Anzahl der Einheiten an:'); readln (anz); if ein = 'Schlaeger' then pun:=anz*6 if ein = 'Messerstecher' then pun:=anz*4 if ein = 'Tuersteher' then pun:=anz*6 ... ... if pun = 0 then writeln ('Die Einheit wurde leider nicht gefunden') else writeln ('Die Gesamtpunktzahl betraegt: ',pun,' '); writeln; writeln; writeln; readln; end. Dein pun ist am Anfang 0 trifft keine if Abfrage zu bleibt es auch so! Uwe |
Re: If Anweisung... Block?
Hast so aber mehr Rechenaufwand, denn es wird weiter verglichen, selbst wenn schon ein Treffer dabei war. Außerdem hast du die Semikolons vergessen. ;)
|
Re: If Anweisung... Block?
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
hier mein Vorschlag:
Delphi-Quellcode:
Lässt sich leicht auf interaktiv umbauen. Die Steuerdatei steckt im Anhang.
var
fn: TFileName; n, iFaktor: Integer; sTyp: String; begin if (ParamCount <> 2) or not TryStrToInt(ParamStr(2), n) or (n < 0) then begin WriteLn(Usage); Halt; end; fn := ChangeFileExt(ParamStr(0), '.txt'); sTyp := ParamStr(1); with TStringList.Create do try LoadFromFile(fn); Sorted := True; if TryStrToInt(Values[sTyp], iFaktor) then WriteLn(iFaktor * n); finally Free; end; end. Freundliche Grüße |
Re: If Anweisung... Block?
Letzt verwirrt ihn doch nicht total! Es ist schon genug neuer Stoff für ihn dazu gekommen und er wird froh sein wenn er das versteht, da müsst ihr nicht mit eurem tollen Wissen prahlen, sondern eher, wie xZise, versuchen, das Neue zu erklären :wall:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:01 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz