Почему-то всегда выполняется if в паскале
Почему-то вcегда выполняется if в зоне, помеченной с двух сторон комментарием //mistake. Всегда выводится:"Вы вспомнили, что на чердаке видели нечто блестящее и решили проверить, что это такое было" - хоть и не должно. Пробовал в условии писать и код символа, и сам символ в одинарных кавычках:
program text_quest;
uses crt;
type
invent = array [1.. 4] of char;
var
e: integer;choice: char;a, b, c: boolean;inventory: invent;
procedure fight(choice: char);
begin
randomize;
writeln('Как только вы подошли к дому, они обратили на вас внимание. Что вы будете делать?');
writeln('1-попробовать убежать, 2-атаковать');
choice := readkey;
if(choice = '1') then begin
writeln('Зомби нагнали вас. Вы погибли');
writeln('Конец демо');
exit
end
else if(choice = '2') then begin
writeln('Вы атаковали одного из них прямо по голове и тут же он упал, но в то время вас успел укусить другой. Выживете ли вы, вот в чем вопрос?');
e := random(10);
if((e > 5) or (e = 5)) then begin
writeln('Вам повезло и вы выжили, победили второго монстра, а свою рану залечили при помощи аптечки, которую нашли в машине');
writeln('Вы завели машину и уехали. Что же будет дальше?');
writeln('Конец демо');
exit
end
else if(e < 5) then begin
writeln('Вам не повезло и вы были съедены');
writeln('Конец демо');
exit
end;
end;
end;
procedure chr_ch(choice: char; a, b, c: boolean; inventory: invent);
begin
if((a = false) and (b = false) and (c = false)) then begin
choice := readkey;
case choice of
'1':
begin
writeln('На столе вы увидели топор и взяли его с собой');
a := true;
inventory[1] := #65;
end;
'2':
begin
writeln('Вы попробовали поднять один из ящиков, но он оказался тяжелым, как и все остальные');
b := true;
end;
'3':
begin
writeln('Вы спустились вниз');
c := true;
end;
end;
end;
if((a = true) and (b = false) and (c = false)) then begin
writeln('1-проверить ящики, 2-спуститься вниз');
choice := readkey;
if(choice = '1') then begin
writeln('Вы попробовали поднять один из ящиков, но он оказался тяжелым, как и все остальные');
b := true;
end
end;
if((a = false) and (b = true) and (c = false)) then begin
writeln('1-посмотреть что на столе, 2-спуститься вниз');
choice := readkey;
if(choice = '1') then begin
writeln('Вы подошли к столу и взяли топор, лежавший на нем');
a := true;
inventory[1] := #65;
end
end;
if((a = true) and (b = true) and (c = false)) then begin
writeln('Так как делать больше было нечего, вы спустились вниз');
a := true;
end;
end;
begin
writeln('Начать игру?');
writeln('1-да, 2-нет');
choice := readkey;
if(choice = '1') then begin
writeln('Добро пожаловать!');
end
else if('2' = choice) then begin
exit
end;
ClrScr;
a := false;
b := false;
c := false;
writeln('На земле воцарился полный хаос, тут и там бродят ходячие мертвецы, а вы один из выживших, не понимающих, что происходит.');
writeln('Вам предстоит выжить в нем, сражаться с монстрами и людьми, обезумевшими из-за происходящего на улицах, бандитами, дикими животными.');
ClrScr;
writeln('Вы очнулись на чердаке какого-то, ваши действия? Впереди вас находится стол, на нем лежит что-то блестящее. Слева вы видите кучу ящиков. Справа от вас вы видите спуск вниз.');
writeln('1-проверить стол, 2-подойти к ящиками, 3-спуститься вниз');
chr_ch(choice, a, b, c, inventory);
writeln('Теперь вы поняли, что находитесь в сарае. В нем вы видите много сена, а впереди вас находится дверь. Вы слышите странные звуки.');
writeln('Что вы будете сделаете?');
writeln('1-посмотреть сквозь щели, что происходит');
writeln('2-попробовать открыть дверь');
//mistake
choice := readkey;
if(choice = '1') then begin
writeln('Вы увидели пару человек, но выглядели они очень странно, их кожа была серой, а изо рта текла кровь');
writeln('Вы попробовали открыть дверь, но она не поддавалась');
if(inventory[1] <> #65) then begin
writeln('Вы вспомнили, что на чердаке видели нечто блестящее и решили проверить, что это такое было');
writeln('Этот предмет оказался топором и вы взяли его с собой. Спустившись вниз, вы решили открыть при помощи него дверь');
a := true;
inventory[1] := #65;
end;
end
else if(choice = '2') then begin
writeln('Вы попробовали открыть дверь, но она не поддавалась');
end;
if(inventory[1] <> #65) then begin
writeln('Вы вспомнили, что на чердаке видели нечто блестящее и решили проверить, что это такое было');
writeln('Этот предмет оказался топором и вы взяли его с собой. Спустившись вниз, вы решили открыть при помощи него дверь');
a := true;
inventory[1] := #65;
end;
if(inventory[1] <> #65) then begin
writeln('Вы вспомнили, что на чердаке видели нечто блестящее и решили проверить, что это такое было');
writeln('Этот предмет оказался топором и вы взяли его с собой. Спустившись вниз, вы решили открыть при помощи него дверь');
a := true;
inventory[1] := #65;
end;
//mistake
writeln('Вы со всей силы ударили топором по двери и она открылась. Те странные люди сразу повернулись в вашу сторону. Вы увидели,что место,в котором вы находитесь, огорожено маленьким забором');
writeln('Что вы сделаете?');
writeln('1-попробуете убежать, 2-попробуете атаковать их');
choice := readkey;
if(choice = '1') then begin
writeln('Вам удалось сбежать от них в лес, в котором вы решили переждать и оценить ситуацию. Во время вашего побега вы успели заметить дома вдали.');
end
else if(choice = '2') then begin
writeln('Вы ударили по одному из них, а другой в тот момент попытался укусить вас');
writeln('Вам показался странным этот факт, да и сами люди выглядели так, как будто были мертвыми, и вы решили убежать');
writeln('Во время драки вы заметили, что где-то вдали есть другие дома, но сами побежали в лес, чтобы переждать и оценить ситуацию');
end;
writeln('Нажмите пробел чтобы продолжить');
choice := readkey;
if(choice = #32) then begin
ClrScr;
end;
writeln('Посидев пару минут и отдышавшись, вы начали думать, что делать дальше');
writeln('Вы решили попасть обратно в то поселение, где вы очнулись, чтобы попробовать найти выживших');
writeln('Спокойно обойдя тот сарай, где вы очнулись, вы вновь увидели те дома вдали. Подойдя поближе, вы увидели несколько машин, в окне одного из домов вы увидели чье-то лицо');
writeln('Справа от того дома вы увидели пару мертвецов. Что вы будете делать?');
writeln('1-проверить машины, 2-подойти к дому');
choice := readkey;
if(choice = '1') then begin
writeln('Одна из машин оказалась открытой, вам повезло, ведь в ней было топливо. Попробовав завести машину, она завелась и вы уехали. Что же будет дальше?');
writeln('Конец демо');
exit
end
else if(choice = '2') then begin
fight(choice);
end;
end.
Ответы (1 шт):
у вас эта надпись вылезает в 3х блоках, один зависит от ввода '1', два других от inventory[1] <> #65
если посмотреть код выше, то у вас или вводится 1 или inventory[1] имеет какие-то другие значения кроме #65
т.е. условия работает всегда
а вообще раз начали писать программы длиннее 10 строчек учитесь разбивать их на функции и процедуры и комментировать код иначе ошибок будет еще больше