2014-01-08 47 views
0
uses crt; 
var 
    i: integer; 
    stav: integer; 
    prsten: boolean; 

begin 
    clrscr(); 
    stav:=0; 
    prsten:=false; 
repeat 
    case stav of 
    0: begin //Zacatek hry// 
     writeln('Toto je hra, jsi Princ a jsi v lese.'); 
     writeln('Na krizovatce muzes jit doleva = 1, nebo doprava = 2'); 
     readln(stav); 
     end; 

    1: begin 
     writeln('Potkas draka, ktery vezni krasnou princeznu. '); 
     writeln('3 = Prepadnout draka, 4 = Promluvit s nim'); 
     readln(stav); 
     end; 

    2: begin 
     writeln('Potkas pocestneho. '); 
     writeln('5 = Pokracujes dal lesem, 6 = Promluvit s pocestnym'); 
     readln(stav); 
     end; 

    3: begin 
     writeln('Drak je silnejsi nez Ty a tak te rozprasil na popel.'); 
     writeln('Zacni znovu stisknutim klavesy 0.'); 
     readln(stav); 
     end; 

    4: begin 
     writeln('Drak Te vyzve na souboj, ale Ty na nej nejsi jeste pripraven.'); 
     writeln('Musis pokracovat dal lesem. Stiskni 5.'); 
     readln(stav); 
     end; 

    5: begin 
     writeln('Po dlouhe a namahave ceste jsi dorazil do mistni knajpy.'); 
     writeln('Najis a napijes se a pokracujes dal. Kousek od knajpy potkas   pocestneho'); 
     writeln('Promluvis s nim. Stiskni 6.'); 
     readln(stav); 
     end; 
    6: begin 
     writeln('Povis mu, ze se pokousis zachranit princeznu pred drakem.'); 
     writeln('On se ti rozhodne pomoci a daruje Ti kouzelny prsten.'); 
     writeln('Nasadit prsten na ruku a pokracovat k drakovi 7/Strcit prsten do kapsy 8 a pokracovat k drakovi.'); 
     readln(stav); 
     end; 
    7: begin 
     writeln('Prijdes k drakovi a das se s nim do boje.'); 
     writeln('Draka zabijes a muzes pokracovat k princezne.'); 
     writeln('Pokracovat k princezne, stiskni 9.'); 
     prsten:=true; 
     readln(stav); 
     end; 
    8: begin 
     writeln('Prijdes k drakovi a das se s nim do boje.'); 
     writeln('Draka zabijes a muzes pokracovat k princezne.'); 
     writeln('Pokracovat k princezne, stiskni 9.'); 
     readln(stav); 
     prsten:=false; 
     end; 
    9: begin 
     if prsten then 

      writeln('Princeznu jsi uchvatil a muzes si ji odvest do hradu.'); 

     else 

      wrtieln('Princezna je rada, ze jsi ji zachranil, ale opovrhuje Tebou.'); 

     readln(stav); 
     end; 
    end; 
until stav<0; 

writeln('KONEC'); 
readln; 
end. 

什麼是造成fatal error ";" expected but else founded消息?帕斯卡致命錯誤「;」預計但其他人建立

+0

您有一個錯字:wrtieln('Princezna je rada,ze jsi ji zachranil,ale opovrhuje Tebou。'); – dmaij

+0

謝謝,但錯誤仍在這裏。 – user3174938

+0

錯誤是什麼?你的編譯器會告訴你... – Roddy

回答

4

不像C,Pascal語言分號;分離語句,它不會終止他們,then子句需要一個單獨的語句。 then WriteLn(...); else是兩個陳述;你想要then WriteLn(...) else

+0

+1非常典型的解釋方式,但我喜歡它。 –

2

讓我們藉此機會學習如何閱讀和使用錯誤消息,以利於您。

編譯器會準確告訴你錯誤是什麼(它在else之前是;,因爲錯誤消息中提到了這兩者)。它還會爲您提供報告錯誤的確切行號;這是在括號中的數字(通常是錯誤消息之前吧,像(德爾福):

[DCC Error] Project2.dpr(14): E2153 ';' not allowed before 'ELSE'

因此錯誤是第14行發生的(在我的代碼 - 你的號碼會有所不同),讓我們來看看這一點。線和前後的幾個:

if prsten then 
    writeln('Princeznu jsi uchvatil a muzes si ji odvest do hradu.'); 
else 
    wrtieln('Princezna je rada, ze jsi ji zachranil, ale opovrhuje Tebou.'); 

所以看的錯誤消息:

';' not allowed before 'ELSE'

這清楚地告訴你,在行;else是問題(這很明顯,因爲它說不允許),所以刪除它。

順便說一句,現在你會得到另一個錯誤:

[DCC Error] Project2.dpr(15): E2003 Undeclared identifier: 'wrtieln'

我想你應該能夠搞懂這個問題;再次,編譯器會爲您提供確切的行號。

你會得到一個又一個,如果你發佈你的整個代碼:

[DCC Error] Project2.dpr(18): E2029 Statement expected but end of file found

這是因爲你忽略了這標誌着帕斯卡爾程序文件的末尾end.。如果你還沒有發佈你的整個代碼,你可能得不到它。

當你從編譯器得到錯誤信息時,學會實際上讀取這一點很重要。在大多數語言中,這些消息的措詞清晰,並且他們都有所有都有信息可以用來嘗試弄清(或至少縮小)代碼中的問題。

+0

谷歌搜索「懸掛其他pascal」也可能有所幫助。 –