Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 13.06.2012, 21:42   #1
Walter
Пользователь
 
Регистрация: 03.11.2008
Сообщений: 43
По умолчанию Ошибка в коде!

Добрый вечер, у меня проявилась проблема в этой строчке кода timeModeling = Int32.Parse(tbTMod.Text);. Изначально, модель писалась на visual studio 2005, но открывая и запуская на VS2010 уже ругается на неверный формат строки. Может кто подскажет, как её изменить?
Код:
private void menuBuild_Run_Click_Click(object sender, EventArgs e)
        {
            distribution = new Distribution();

            stack1 = new Stack<int>();
            stack2 = new Stack<int>();
            startinquee1 = new Stack<double>();
            timeinquee1 = new Stack<double>();

            // read distribution parameters
            int req1ErlangLenght = Int32.Parse(tbErlangLength.Text);
            double req1ErlangLambda = Double.Parse(tbErlangLambda.Text);
            double req2PoissonLambda = Double.Parse(tbPoissonLambda.Text);
            double req1SrvTimeNormalMu = Double.Parse(tbNormalMu.Text);
            double req1SrvTimeNormalSigma = Double.Parse(tbNormalSigma.Text);
            double req2SrvTimeExpLambda = Double.Parse(tbExponentialLambda.Text);
            timeModeling = Int32.Parse(tbTMod.Text);

Последний раз редактировалось Walter; 13.06.2012 в 21:56.
Walter вне форума
Старый 13.06.2012, 23:18   #2
Lime
Форумчанин
 
Аватар для Lime
 
Регистрация: 10.02.2009
Сообщений: 815
По умолчанию

Код:
System.Convert.ToInt32(text);
?
Lime вне форума
Старый 14.06.2012, 03:39   #3
Гаврилов
Пользователь
 
Регистрация: 11.05.2012
Сообщений: 85
По умолчанию

... а вообще Int32.Parse(string) работает и в VS 2010. Работает же без ошибки в Вашем же фрагменте строка
Код:
 int req1ErlangLenght = Int32.Parse(tbErlangLength.Text);
Ищите ошибку либо в timeModeling (кстати, в Вашем коде не видно, какого типа эта штука), либо в tbTMod.Text . Может быть, проверить так:
Код:
if ( !String.IsNullOrEmpty(tbTMod.Text) ) ...
Гаврилов вне форума
Старый 14.06.2012, 06:04   #4
Hexy
 
Аватар для Hexy
 
Регистрация: 13.06.2011
Сообщений: 9
По умолчанию

Цитата:
Добрый вечер, у меня проявилась проблема в этой строчке кода timeModeling = Int32.Parse(tbTMod.Text);. Изначально, модель писалась на visual studio 2005, но открывая и запуская на VS2010 уже ругается на неверный формат строки. Может кто подскажет, как её изменить?
заверните в кэтч, и да, что это за переменная - tbTMod?
Код:
try
{
    timeModelling = Int32.Parse(tbTMod.Text);
}
catch (Exception e)
{
    System.Windows.Forms.MessageBox.Show(e.Message);
    timeModelling = 0;
}
Hexy вне форума
Старый 14.06.2012, 12:10   #5
Гаврилов
Пользователь
 
Регистрация: 11.05.2012
Сообщений: 85
По умолчанию

Хорошо, monseigneur Walter, по другим отзывам и отсутствию Вашей реакции я вижу, что мне нужно продолжить.
Может быть, Вы и так знаете, но по Вашему фрагменту кода не видно, чтобы Вы это знание использовали: надо проверять на недопустимость значения, введенные от руки в элементы пользовательского ввода (то есть всё, что появляется на экране для ввода чего-нибудь, надо проверять). Как минимум, надо проверять, введено ли что-нибудь вообще и на это в коде реагировать, и это надо делать для каждого элемента. Просто иначе Ваша прога будет выдавать не то, что нужно, или - что гораздо чаще - просто вываливаться в ОС с каким-нибудь наведенным сообщением или зависать, потому что "абсолютно безопасного кода" на самом деле не существует.
В Вашем случае применительно к конкретной строчке я бы применил следующий код (именно так или с вариациями, но я всегда делаю проверку ввода):
Код:
int timeModeling = 0; 

if ( !String.IsNullOrEmpty(tbTMod.Text.Trim()) )
  timeModeling = Int32.Parse(tbTMod.Text.Trim());
Если после этой проверки на пустой ввод остался timeModeling = 0, то потом это обстоятельство надо правильно интерпретировать, например, при вводе в БД устанавливать соответствующее поле кортежа в NULL, что совсем не то же самое, что сделать timeModeling = null и забыть.
Trim нужен, потому что user, прежде чем что-то ввести, в задумчивости обычно жмет клавишу <пробел>, а пробел или несколько пробелов - это не есть пустой ввод, который нам надо отловить и отсечь.
Замечу, что это всего лишь МИНИМАЛЬНАЯ проверка ввода, она не затрагивает стиль представления числа и допустимость на пределы. Но в 99% случаев и этого достаточно, более сложной проверки не требуется.
PS:
Можно также писать код проверки в обработчике OnValidating для каждого элемента ввода, но это мне кажется не очень удобным (предположим, ввел не так, но может быть, это все-таки совместимо со значениями других введенных полей - это можно определить только в основном коде, или произойдёт усложнение кода множеством флагов). Это уже дело вкуса - что где писать,- но проверка нужна!

Последний раз редактировалось Гаврилов; 14.06.2012 в 12:27.
Гаврилов вне форума
Старый 14.06.2012, 12:28   #6
Hexy
 
Аватар для Hexy
 
Регистрация: 13.06.2011
Сообщений: 9
По умолчанию

Цитата:
Сообщение от Гаврилов Посмотреть сообщение
Trim нужен, потому что user, прежде чем что-то ввести, в задумчивости обычно жмет клавишу <пробел>, а пробел или несколько пробелов - это не есть пустой ввод, который нам надо отловить и отсечь.
Замечу, что это всего лишь МИНИМАЛЬНАЯ проверка ввода, она не затрагивает стиль представления числа и допустимость на пределы. Но в 99% случаев и этого достаточно, более сложной проверки не требуется.
блин, чем вам не угодил try/catch? он отловит абсолютно все виды ошибок и позволит задебажить их быстрее чего бы то ни было, что за танцы с бубном?
разумеется проверка строки это выход, но зачем всё усложнять?
Hexy вне форума
Старый 14.06.2012, 12:58   #7
Гаврилов
Пользователь
 
Регистрация: 11.05.2012
Сообщений: 85
По умолчанию

Специально для Hexy
А для того, чтобы на попадать в исключения, которые тоже требуют обработки. Вы предлагаете, не проверяя качество ввода каждого из полей формы (а их бывают десятки), каждый раз попадать в Exception с выводом пространного сообщения об ошибке? Это что-то новенькое в программировании. И зачем только люди трудились, создавая средства проверки вводимых данных, когда все так просто!
PS:
Блоки try-catch нужны, но это не панацея! Они нужны, чтобы не было краха программы в случаях, когда программист чего-то не учел, но зачем специально до этого доводить?
БЛИН

Последний раз редактировалось Гаврилов; 14.06.2012 в 13:18.
Гаврилов вне форума
Старый 14.06.2012, 13:31   #8
Гаврилов
Пользователь
 
Регистрация: 11.05.2012
Сообщений: 85
По умолчанию

Ну, с Hexy (Гексинг), все ясно: я бы его в отдел разработки ПО не взял, исходя из того, что он будет писать заведомо неграмотные программы, а потом выпереть наружу программиста-верхогляда будет не так-то просто (потребуются время и деньги на пособие), и кому-то придется за него поработать, а в отделе есть план, рассчитанный на каждую душу.

Но хотелось бы увидеть ответный отзыв зачинщика - Вальтера: на чем же он остановился?

Последний раз редактировалось Гаврилов; 14.06.2012 в 13:43.
Гаврилов вне форума
Старый 14.06.2012, 13:56   #9
Скарам
Дружите с Linq ;)
Форумчанин
 
Аватар для Скарам
 
Регистрация: 15.10.2008
Сообщений: 822
По умолчанию

2Гаврилов:
Не стоит так нападать на человека, недостаток опыта - это еще не конец света
2Hexy:
1)try-catch не следует использовать в тех местах, где можно сделать проверки, исключающие ошибки ( исполняется код дольше, все равно придется обрабатывать ошибку и прерывать исполнение процедур).
2) Если ставить отлов ошибок, то на конкретный тип ошибки. Если ловить все ошибки, то маскируются ошибки, которые могут возникнуть в других местах и отловить их будет очень сложно.
Не давай организму поблажки, каждый день тренируй его в шашки..
Скарам вне форума
Старый 14.06.2012, 14:12   #10
Hexy
 
Аватар для Hexy
 
Регистрация: 13.06.2011
Сообщений: 9
По умолчанию

Цитата:
Сообщение от Гаврилов Посмотреть сообщение
Ну, с Hexy (Гексинг), все ясно: я бы его в отдел разработки ПО не взял, исходя из того, что он будет писать заведомо неграмотные программы, а потом выпереть наружу программиста-верхогляда будет не так-то просто (потребуются время и деньги на пособие), и кому-то придется за него поработать, а в отделе есть план, рассчитанный на каждую душу.

Но хотелось бы увидеть ответный отзыв зачинщика - Вальтера: на чем же он остановился?
из вас Raaaage так и прёт, не буду холиварить, я понимаю о чём вы, но я не согласен. в любом случае я не гескинг а хексинг. [цитата]программиста-верхогляда[/] что бы это не значило, я на вас не в обиде
а еще я школьник, поэтому на работу меня всё равно не возьмут, я лишь стараюсь помочь людям таким образом, каким это видется правильно для меня, если вы не согласны, это ваше право.
[q]заведомо неграмотные программы[/q]
вы недооцениваете мою мощь ^_^

Цитата:
Сообщение от Скарам Посмотреть сообщение
2Гаврилов:
Не стоит так нападать на человека, недостаток опыта - это еще не конец света
2Hexy:
1)try-catch не следует использовать в тех местах, где можно сделать проверки, исключающие ошибки ( исполняется код дольше, все равно придется обрабатывать ошибку и прерывать исполнение процедур).
2) Если ставить отлов ошибок, то на конкретный тип ошибки. Если ловить все ошибки, то маскируются ошибки, которые могут возникнуть в других местах и отловить их будет очень сложно.
ну не знаю, я ставлю трай кэтч, запускаю, смотрю какие ошибки получаются, фиксю их, и если больше ничего кэтч не выводит, стираю блоки, я не говорю что нельзя ограничивать ввод, я лишь говорю о способе дебага, и не более. и да, опыта у меня еще мало, я 3 года писал на as 3.0, потом немного на паскале и c++, но паскаль не удобен, а c++ слишком сложен - алгоритм программы из-за работы с памятью и указателей не укладывается в голове, и совсем недавно(неделю назад) начал писать на шарпе, и очень этому рад. пишу узконаправленно - managed directx, поэтому опыт в других сферах пока поверхностный.

Цитата:
Сообщение от Гаврилов Посмотреть сообщение
Ну, с Hexy (Гексинг), все ясно: я бы его в отдел разработки ПО не взял, исходя из того, что он будет писать заведомо неграмотные программы, а потом выпереть наружу программиста-верхогляда будет не так-то просто (потребуются время и деньги на пособие), и кому-то придется за него поработать, а в отделе есть план, рассчитанный на каждую душу.

Но хотелось бы увидеть ответный отзыв зачинщика - Вальтера: на чем же он остановился?
Код:
catch (Exception e)
{
    MessageBox.Show(e.Message);
}
хотелось? увидьте

Последний раз редактировалось Stilet; 14.06.2012 в 20:30.
Hexy вне форума
Закрытая тема


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Где ошибка в этом исходном коде на языке Си? Или ошибка в Excel? ArchiCurtis Помощь студентам 2 07.04.2012 14:16
Ошибка в коде Sylar9 Win Api 5 24.03.2012 20:38
Ошибка в коде drzod C# (си шарп) 1 21.02.2011 12:03
Ошибка в коде, ошибка в css или это проблема с совместимостью с браузерами? ankris HTML и CSS 5 23.11.2010 16:58
Ошибка в коде Molochnik Общие вопросы C/C++ 0 20.06.2010 07:50