Konsola problem z pobraniem wartości od użytkownika

0

Hejo kod wygląda tak

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;



namespace Powtorzenie_cSharp
{
    class Program
    {

        
        static void Main(string[] args)
        {
            menu_glowne();
        }

        static public void menu_glowne()
        {
            int wybor = 0;
            Console.WriteLine("----------------");
            Console.WriteLine("   MENU GLOWNE");
            Console.WriteLine("----------------");
            Console.WriteLine("1. Kalkulator");
            Console.WriteLine("2. Srednia wazona i arytmetyczna");
            Console.WriteLine("3. Generator hasel");
            Console.WriteLine("4. Quiz");
            Console.WriteLine("5. BinToDec");
            Console.WriteLine("6. Wyjscie");
            Console.WriteLine("----------------");
            Console.WriteLine("   MENU GLOWNE");
            Console.WriteLine("----------------");
            Console.WriteLine("Wybor:");
            wybor = Console.Read();

            switch (wybor)
            {
                case '1':
                    calculator();
                    break;
                case '2':
                    break;
                case '3':
                    break;
                case '4':
                    break;
                case '5':
                    break;
                default: Console.WriteLine("Nie ma takiej opcji w menu!"); Console.ReadKey();
                    break;
                    
            }
        }

       static public void calculator()
        {
            int a, b;
            float wynik = 0;
            int wybor;
            Console.Write("Podaj liczbe 1:");
            a = Console.Read();
            Console.Write("Podaj liczbe 2:");
            b = Console.Read();
            Console.WriteLine();
            Console.WriteLine("1. Dodaj");
            Console.WriteLine("2. Odejmij");
            Console.WriteLine("3. Pomnoz");
            Console.WriteLine("4. Podziel");
            Console.WriteLine("5. Cofnij do menu");
            Console.Write("Wybor:");
            wybor = Console.Read();
            switch (wybor)
            {
                case 1:
                    //wynik = a + b;
                    Console.WriteLine("Wynik " + wynik);
                    Console.ReadKey();
                    break;
                case 2:
                   // wynik = a - b;
                    Console.WriteLine("Wynik " + wynik);
                    Console.ReadKey();
                    break;
                case 3:
                    //wynik = a * b;
                    Console.WriteLine("Wynik " + wynik);
                    Console.ReadKey();
                    break;
                case 4:
                   // wynik = a / b;
                    Console.WriteLine("Wynik " + wynik);
                    Console.ReadKey();
                    break;
                default:
                    break;
            }


        }


    }
}

I cały problem tkwi w tym, że na początku mogę wybrać daną opcje z menu jak widać, ale gdy wybiorę 1 i wejdę do funkcji calculator to automatycznie przejeżdza mi przez 2 zmienne nie pytając nawet o pobranie ich. http://prntscr.com/hshmb7
Mimo, że w kodzie mam instrukcje, aby program poprosił o wpisanie danych przez użytkownika, w czym tkwi problem?

0

Zamień Console.Read(); na Console.ReadLine();

0
neves napisał(a):

Zamień Console.Read(); na Console.ReadLine();

ReadLine czyta tylko stringi

0
Convert.ToString(coś_tam) 
albo w drugą stronę
Convert.ToInt32(jakiś_string)
0

Stringa można zamienić na liczbę za pomocą Convert.ToInt32()
Read czyta wyłącznie jeden pojedynczy znak (nie liczbę ani nie cyfrę), nawet jakby się zatrzymał tam gdzie trzeba to byś dostał zły wynik.
Także, do przeczytania liczby użyj int liczba = Convert.ToInt32(Console.ReadLine())

0

A jeszcze lepiej możesz zrobić osobną metodę do wprowadzania liczb wraz z zabezpieczaniem się przed nieprawidłowym wejściem:

static int ReadInt(string message)
{
    int input;
    do
    {
        Console.WriteLine(message);
    } while (!int.TryParse(Console.ReadLine(), out input));
    return input;
}

gdzie przekazujesz do niej komunikat jaki wyświetlić.

0

Dzięki chłopaki

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