![]() |
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 02:36 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