Advanced Loop 11.Въвеждане на четно число (с обработка на грешен вход)
Здравейте, пичове. Имам два въпроса за тази задача.http://pastebin.com/CrqRLWEi -това ми е кода.
Първо - как да овладея ексепшъни, за по-големи от инт числа? Ползвам catch (FormatException) ,което върши работа за стринг, ама май не върши за по-големи числа. И второ, при трето въвеждане на нецяло число или стринг ми дава грешка. (System.FormatException: Input string was not in a correct format) Чудно защо като първите два пъти си влиза в изключението и си казва, че е грешен инпута? Какво е различно третия път?
Всъщност, имам две проверки за изключения и само първата е извън цикъла. Втората е вътре. Това е неефективно знам, но така и не видях в кода ти разграничение между нечетно число и невалидно число. В условието на задачата влиза това разграничение и джъджа проверява за различните случаи. Съчетал си двете условия и даваш един и същи резултат, което не върши работа. Това, което ми помогна обаче е, че видях как си ползвал tryparse синтаксиса и имам един въпрос: int.TryParse(Console.ReadLine(), out a) това out a накрая какво по-точно прави.
Не е проблем да се разделят проверките за невалидно и нечетно число. Просто за конкретната задача се получава и този вариант. В Judge дава 100/100, иначе не бих качил решението.
Относно out в TryParse - то указва в коя променлива да се запише числото, в случай че Parse-ването е успешно.
Може ли да обясниш какво точно прави параметърът "out", който си ползвал в решението си?
Може ли да обесниш какво точно прави параметъра "out", който си ползвал?
out посочва в коя променлива да се съхрани стойността. Тъй като TryParse по принцип връща bool (дали parse-ването е било успешно), с out казваме къде да запише резултата, ако всичко е минало добре. :)
out е ключова дума, която подава аргумента по референция както прави и ref с разликата, че при out променливата, която подаваш на метода не трябва да е инициализирана, а при ref трябва да е инициализирана.Метод, който приема параметър с out трябва задължително да го инициализира в кода си.
Но ползването на ref и out се счита за лоша практика, затова трябва да се избягват при писането на методи, ако може.