Консультация № 51256
05.08.2006, 18:44
0.00 руб.
0 3 2
Доброго врение суток...
посмотрите пожалуйста код и скажите где ошибка.
Задача: программа должна вывести "ошибка ввода" если пользователь ввел не "да" и не "нет", а если ввел "да" ии "нет", программа должна вывести то что ввел пользователь. У меня почемуто в любом случае выводится "ошибка ввода"
Всем спасибо...

Приложение:
#!/usr/bin/perl -wprint qq(Введите "да" или "нет"\n);$ans = <STDIN>; chomp $ans;if (($ans ne "а")or($ans ne "нет")) {print "Ошибка ввода";} else {print "Вы ввели $ans";}

Обсуждение

Неизвестный
06.08.2006, 01:25
общий
это ответ
Доброе время суток, Lperw

ну я бы во-первых обратила внимание на консоль, с которой работаю -
кодировка и прочая ересь -

1) пробуем подключать locale

ну и искать всёж регуляркой - не надеятся на авось -

2) =~/

3) в конце-концов самый лучший вариант - НЕ ЗАПАРИВАТЬСЯ и не искать таких вариантов - используйте EN набор символов и будет вам щастье )

с уважением, удачи


Приложение:
use POSIX;use locale;print qq( \n);$ans = <STDIN>;if (!($ans=~/да/) || !($ans=~/нет/) ) {print "oshibka vvoda";} else {print "your string $ans";}
Неизвестный
06.08.2006, 04:15
общий
это ответ
Здравствуйте, Lperw!
Ошибка впринципе в том что вы очень уж закрутили условием cмотрим что у вас:
if( $ans ne "yes" or $ans ne "no"){print "mistake;}
Если $ans yes - то будет истинным второе значение и or вернет 1. Если $ans no - первое, опять таки 1, если будет вообще что-то левое, то опять таки будет 1 - т.е. при любом раскладе будет печатать mistake. Условие лучше привести к виду:
if($ans eq yes or $ans eq no){print "your string $ans"} ... ну и так далее, или свести к регулярному выражнию как вам посоветовали раньше:
<code>
#!/usr/bin/perl -w
print qq( \n);
$ans = <STDIN>;
if ($ans=~m/^(да|нет)$/ ){
print "your string $ans \n";
}else{
print "mistake \n";
}
</code>
По поводу use POSIX и use locale - не знаю - у меня все прекрасно и без них работает :).


Неизвестный
06.08.2006, 13:04
общий
просто надо поменять функцию "или" на "и" в выражении if (($ans ne "а")or($ans ne "нет")
Форма ответа