obsługa wyjątku c#

1

Witam

Chciałem sprawdzić działanie obsługi wyjątku jednak kompilator zgłasza mi błąd odnośnie zmiennej a nie bardzo mogę zrozumieć w czym rzecz. Poniżej kod programu z błędem w linii 24.

using System;
public class Test
{
        public static void Main()
        {
                int t;

        Console.WriteLine("podaj cyfre");
        try {
                t = int.Parse(Console.ReadLine());
            Console.WriteLine ("jestem w try");
            }

        catch (FormatException)
            {
            Console.WriteLine ("jestem w catch");
            }

        finally 
            {
            Console.WriteLine("jestem w finally ");
            }

        while(t>0)
                {
                Console.WriteLine("wartosc t " +t);
                        t--;
                }
        }
} 
1

Mamy sobie liczyć linie rozumiem? Jaki błąd zgłasza? Use of unassigned variable t?

0
Sarrus napisał(a)

Mamy sobie liczyć linie rozumiem? Jaki błąd zgłasza? Use of unassigned variable t?

Program pobiera zmienną t, potem ma przekonwertować na int w bloku instrukcji try. Jeśli zostanie podana cyfra to wyświetla t podaną ilość razy. Jeśli jednak użytkownik poda zmienną która nie da się przekonwertować powinien uruchomić przechwytywanie wyjątku. Zgłasza "error Use of unassigned variable t"

2

załóżmy, że ktoś zamiast cyfry (a raczej: liczby) poda „dupa”. wykonałyby się kolejno instrukcje:

        int t;
        Console.WriteLine("podaj cyfre");
    t = int.Parse(Console.ReadLine());
    // tu mamy wyjątek, więc skaczemy do "catch":
    Console.WriteLine("jestem w catch");
    // koniec wyjątku, skaczemy do "finally":
    Console.WriteLine("jestem w finally ");
    // koniec finally, idziemy dalej:
        while (t > 0)  // BUM! jaką wartość ma teraz t?

C# jest dość restrykcyjny, jeśli jedyne przypisanie wartości do t zawarte jest wewnątrz try, to znaczy że teoretycznie może się nie wykonać.
W twoim przypadku możesz dodać np. t = -1 wewnątrz catch, albo już na początku dać int t = -1 — w ten sposób zmienna t zawsze będzie inicjalizowana.

0

W takich wypadkach właśnie ten błąd się pojawia jak napisał Azarien. Podobnie ma się sprawa do if-ów:

int t;
if (...)
{
   t = 5;
}

Console.Writeline(t); //<- błąd bo if nie musi się wykonać i zmienna będzie nieprzypisana
0

Dziękuję wszystkim za precyzyjną pomoc :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0