2017-03-25 3 views
-2

私はパスカルでこのハングマンプログラムを書いてきましたが、私はこの問題をしばらくは見ていませんでした。私はもともと入力が\nであると思っていましたが、後でwrite()というビットがありましたが、そうではありませんでした。 aと入力すると何が起こるのでしょうか?それはループを通り抜けてすべてのことを行いますが、何も表示されず、新しい行の文字や目に見えないもので再び通り抜けます。私はguessが1文字しか得られないようにしようとしましたが、それは目に見えない文字で何度もループを作りました。ループ実行中(?)

誰かがここで間違っていることについてどんな種類の入力を提供することができればそれはすばらしいでしょう。 Googleは実際に一度の大きな助けではありませんでした

とにかく、ありがとうございます。

program p1; 
const 
    MAX_GUESSES = 6; 
    mysteryWord = 'abomination'; 
    //comparetext(str1,str2); 
type 
    word = array[0 .. 11] of char; 
var 
    guesses : word; 
    counter : integer;//for multipurpose counting ;) 
    wrong : integer; 
    keepGoing : boolean; 
    guess : char; 
    exists : boolean; 
begin 
    guesses := '***********'; 
    wrong := 0; 
    keepGoing := true; 
    repeat 
    keepGoing := false; 
    exists := false; 
    writeln('your word is ' + guesses + '.'); 
    write('You have ');   //this one line is separated into 3 
    write(6-wrong);    //because it wont allow (6-wrong) to 
    writeln(' wrong guesses left!');//be put in line with strings. 
    write('Guess a letter: '); 
    read(guess); 
    for counter := 0 to 11 do 
    begin 
     if (guess = mysteryWord[counter]) then 
     begin 
     guesses[counter-1] := guess; 
     exists := true; 
     end; 
    end; 
    if(exists = false) then wrong := wrong + 1; 
    for counter := 0 to 11 do 
    begin 
     if(guesses[counter] = '*') then keepGoing := true; 
    end; 
    until ((wrong >= 6) or (keepGoing = false)); 

end. 
+2

"for counter:= 0 to 11 do"です。文字列は「1」に基づいています。 –

+0

これは何も変わりません。 – roflcopter1101

+1

次に、文字列の0番目と-1番目の要素にアクセスします。 –

答えて

1

あなたがライン読み取り(推測)を交換した場合。readln(推測);ループごとに1文字しか得られません。

行を置換すると、word = array [0 .. 11] char;word = array [1 .. 11] of char;(あるいは、不要な '単語'タイプを取り除き、推測を文字列として設定する)、ループを1から11まで実行し、行を置き換えてください。推測[counter-1]:=推測;の推測[カウンタ]:=推測;の場合、プログラムは境界外の配列位置にアクセスするエラーを発生しません。

また

(あなたが最終的に繰り返しループを終了したときに)彼らは勝ったか負けた場合はプレイヤーを伝えるいくつかの出力テキストを提供するために、それはいいかもしれません...

...そして、あなたはまた、3を置き換えることができます行書き込み( 'あなたが');書き込み(6間違い); writeln( '間違った推測が残った!');、1行でwriteln( 'あなたは持っている、6 - 間違って、'間違った推測が残った! ');

+0

ありがとうございます!私が調べたすべてのチュートリアルのWebサイトでは、readln()関数について何も言わなかったので、私はそのようなことをやろうと考えなかった。私はループの最後に物事を持つことを計画している、私はちょうどそのエラーを修正したいと思った。 – roflcopter1101

関連する問題