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 :(得分:4)
与C不同,在Pascal中,分号;
分隔语句,它不会终止它们,then
子句需要单个语句。 then WriteLn(...); else
是两个陈述;你想要then WriteLn(...) else
。
答案 1 :(得分:2)
让我们借此机会了解如何阅读和使用错误信息。
编译器会准确地告诉您错误是什么(在;
之前它是else
,因为错误消息中提到了这两个错误)。它还为您提供报告错误的确切行号;这是数字(通常在错误信息之前的括号中,如(来自Delphi):
[DCC错误] Project2.dpr(14):E2153';'在'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.');
请查看错误消息:
';'在'ELSE'之前不允许
这清楚地告诉您;
之前的行else
是问题(非常清楚,因为它说不允许),所以删除它。
[DCC错误] Project2.dpr(15):E2003未声明的标识符:'wrtieln'
我认为你应该能够把它弄清楚;再次,编译器为您提供确切的行号。
如果您发布了整个代码,那么您将获得另一个代码:
[DCC错误] Project2.dpr(18):E2029预期声明但发现文件结束
这是因为你遗漏了标记Pascal中程序文件结尾的end.
。如果您还没有发布完整的代码,那么您可能无法获得它。
当您从编译器收到错误消息时,学会实际读取这一词很重要。在大多数语言中,消息的措辞明确,并且所有都有可用于尝试找出(或至少缩小)代码中问题的信息。