Aplikacja konsolowa kalkulator

0

Cześć,

Od niedawna zacząłem uczyć się C# i podczas swojej przygody z tym językiem napotkałem na problem. Mój kalkulator ma problem z liczbami z kropką. Jeżeli podaję liczba1 jako np. 1.5 to wyskakuje mi komunikat System.FormatException: 'Nieprawidłowy format ciągu wejściowego.', a jeżeli wybiorę liczby całkowite, to na końcu wyświetla mi komunikat "suma...", "różnica...", itd. ale bez wyniku liczbowego. Jaka może być tego przyczyna?

static void Main(string[] args)
{
    Console.WriteLine("Podaj pierwszą liczbę");
    double liczba1 = double.Parse(Console.ReadLine());

    Console.WriteLine("Podaj znak +,-,*,/");
    string znak = Console.ReadLine();

    Console.WriteLine("Podaj drugą liczbę");
    double liczba2 = double.Parse(Console.ReadLine());

    double wynik;

    switch (znak)
    {
        case "+":
            wynik = liczba1 + liczba2;
            Console.WriteLine("Suma liczb wynosi = ", wynik);
            break;
        case "-":
            wynik = liczba1 - liczba2;
            Console.WriteLine("Różnica liczb wynosi = ", wynik);
            break;
        case "*":
            wynik = liczba1 * liczba2;
            Console.WriteLine("Iloraz liczb wynosi = ", wynik);
            break;
        case "/":
            wynik = liczba1 / liczba2;
            Console.WriteLine("Iloczyn liczb wynosi = ", wynik);
            break;
        default:
            Console.WriteLine("Wybrałeś nieprawidłowy znak");
            break;
    }
    Console.ReadKey();
}
4

Najpewniej w twoim systemie separatorem dziesiętnym nie jest kropka tylko przecinek. Poczytaj o CultureInfo

2

Zamiast

Console.WriteLine("Suma liczb wynosi = ", wynik);

to np.

Console.WriteLine("Suma liczb wynosi = " + wynik);

lub

Console.WriteLine($"Suma liczb wynosi = {wynik}");

0
kzkzg napisał(a):

Najpewniej w twoim systemie separatorem dziesiętnym nie jest kropka tylko przecinek. Poczytaj o CultureInfo

Lub, przy w Polsce typowej niewiedzy, jaki user siadzie do komputera (ja sam jestem kropkowy) , liczba = liczba.Replace(',','.')

0
ZrobieDobrze napisał(a):

Lub, przy w Polsce typowej niewiedzy, jaki user siadzie do komputera (ja sam jestem kropkowy) , liczba = liczba.Replace(',','.')

Nie ma znaczenia jaki Ty jesteś lecz jakim językiem próbujesz się posługiwać. W języku polskim separatorem dziesiętnym jest przecinek.

1

A, i odpowiadając na pytanie Jaka może być tego przyczyna?

Metoda WriteLine ma m.in takie przeciążenie public static void WriteLine (string format, object? arg0);

Pierwszy argument to format, a drugi to obiekt który zostanie "zaaplikowany" w dany format.

I wtedy, jeżeli przy twoim wywołaniu Console.WriteLine("Iloczyn liczb wynosi = ", wynik); w miejsce pierwszego argumentu byś dał "Iloczyn liczb wynosi = {0}", to za {0} byłby wstawiony wynik z wywołania metody ToString na drugim argumencie

Czyli Console.WriteLine("Iloczyn liczb wynosi = {0}", wynik); dałoby oczekiwany wynik

bo ToString() dla double = Converts the numeric value of this instance to its equivalent string representation using the specified format and culture-specific format information.

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