Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема вывода 
:(
    Опции темы
OutlawZ
  Дата 18.4.2009, 22:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 269
Регистрация: 19.10.2007

Репутация: нет
Всего: нет



Доброй ночи, собственно смешная проблема, но все же проблема, под вечер решил немного покодить и столкнулся с проблемой вывода решения двух переменных:
Код

use locale;
use POSIX qw (locale_h);
setlocale(LC_CTYPE, 'ru_RU.KOI8-R');

sub start()
{
 print "Введите значение X:";
 $x = <STDIN>; chomp($x);
 print "Введите значение Y:";
 $y = <STDIN>; chomp($y);
 
 $plus  = $x + $y;
 $minus = $x - $y;
 $mno   = $x * $y;
 $dele  = $x / $y;

 print "Сложение: " . $plus . "\n";
 print "Вычитание: " . $minus . "\n";
 print "Деление: " . $dele . "\n";
 print "Умножение: " . $mno . "\n";
}
sub next_()
{
 $i = $j = 2;
 $d =.781;
 $char = '&';
 $define = 12 + 6;

 print "i=$i" . "\n" . "j=$j" . "\n" . "d=$d" . "\n" . "char=$char" . "\n";
 print "define=$define" . "\n";
 print "Введите целое значение K:";
 $k = <STDIN>; chomp($k);
 print "k=$k" . "\n";
 print "define * j= " . $define * $j . "\nd + k= " . $d + $k . "\n";
}
start();
next_();

Проблема в строчке print "define * j= " . $define * $j . "\nd + k= " . $d + $k . "\n"; вывод "define * j= " . $define * $j выводит все правильно а вот строчка "\nd + k= " . $d + $k . "\n"; выводит просто 2 вот результат:
Код

outlaw@outlaw-laptop:~/Документы$ perl al.pl
Введите значение X:4
Введите значение Y:5
Сложение: 9
Вычитание: -1
Деление: 0.8
Умножение: 20
i=2
j=2
d=0.781
char=&
define=18
Введите целое значение K:2
k=2
2


Решил сделать так:
Код

 print "define * j= " . $define * $j . "\nd + k= ";
 print $d + $k . "\n";

Выводит все правильно вот результат:
Код

outlaw@outlaw-laptop:~/Документы$ perl al.pl
Введите значение X:4
Введите значение Y:5
Сложение: 9
Вычитание: -1
Деление: 0.8
Умножение: 20
i=2
j=2
d=0.781
char=&
define=18
Введите целое значение K:2
k=2
define * j= 36
d + k= 2.781


Вопрос, почему он не хочет принимать print "define * j= " . $define * $j . "\nd + k= " . $d + $k . "\n"; ?? Зарание спасибо )


--------------------
user posted image
user posted image
PM MAIL   Вверх
vadiml
Дата 18.4.2009, 23:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 310
Регистрация: 27.7.2007

Репутация: 5
Всего: 7



Попробуйте:
print "define * j= " . $define * $j . "\nd + k= " . ($d + $k) . "\n";

А вообще если Вы пропишите 
#!/usr/bin/perl -w
или
use warnings;

То Вам perl напишет почему так.

Так же могу посоветовать всегда использовать
use warnings;
А если Вам надо исключить какой-то кусок из предупреждений, лучше написать:
no  warnings;
# Ваш хитрый русок кода
use warnings;



PM MAIL Jabber   Вверх
OutlawZ
Дата 19.4.2009, 00:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 269
Регистрация: 19.10.2007

Репутация: нет
Всего: нет



Спасибо smile


--------------------
user posted image
user posted image
PM MAIL   Вверх
amg
Дата 19.4.2009, 11:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1145
Регистрация: 3.8.2006
Где: Новосибирск

Репутация: 38
Всего: 50



Цитата(OutlawZ @  18.4.2009,  22:54 Найти цитируемый пост)
Вопрос, почему он не хочет принимать print "define * j= " . $define * $j . "\nd + k= " . $d + $k . "\n"; ??
Проблема - в неправильном приоритете операций. Попробуйте исполнить такую команду (она расставит скобки), и сразу станет ясно:
Код
perl -MO=Deparse,-p -e 'print "define * j= " . $define * $j . "\nd + k= " . $d + $k . "\n";'

Команду эту нужно исполнять из консоли (cmd в винде). Если у Вас винда, то внешние одинарные кавычки (из cmd не не понимает) нужно заменить на двойные, а все остальные двойные кавычки заэкранировать. 
Потом попробуйте то же самое, заменив все точки на запятые.
PM MAIL   Вверх
vadiml
Дата 19.4.2009, 14:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 310
Регистрация: 27.7.2007

Репутация: 5
Всего: 7



amg
Ну это долго, это не для ленивых...
добавление ключа -w проще и сразу напишет:
Argument "define * j= 6\nd + k= 4" isn't numeric in addition (+) at qqqq.pl line строка
и гораздо универсальнее
PM MAIL Jabber   Вверх
ginnie
Дата 19.4.2009, 15:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 6.1.2008
Где: Москва

Репутация: 38
Всего: 49



vadiml, с точки зрения универсальности B::Deparse как раз более универсален, а use warnings поможет лишь в части случаев (когда будут предупреждения).


--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
PM MAIL Skype Jabber   Вверх
amg
Дата 20.4.2009, 06:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1145
Регистрация: 3.8.2006
Где: Новосибирск

Репутация: 38
Всего: 50



Цитата(vadiml @  19.4.2009,  14:11 Найти цитируемый пост)
Ну это долго, это не для ленивых...
добавление ключа -w проще
Ключ -w само собой нужен. Но часто же бывает, что синтаксис правильный, поэтому предупреждения не будет, а последовательность выполнения операций программист и перл понимают по разному. Типичный пример:
open F, $file || die;

А насчет долго не для ленивых - я как раз ленив, поэтому эту операцию просто посадил на кнопку редактора.

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0684 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.