Dziwne zachowanie - sczytanie klawisza

0

Witam,

Spotkałem się z bardzo dziwnym problemem mianowicie chciałem sczytać naciśnięty klawisz i następnie po sprawdzeniu czy jest to liczba wywołać odpowiedni klucz z Dictionary.
Zacząłem to robić tak:

 
Console.WriteLine("\n Wybierz swoją kartę...");
            ConsoleKeyInfo ski1 = Console.ReadKey();

            string nowy = ski1.KeyChar.ToString();
            Console.WriteLine(nowy);
            string nowy1 = nowy.Substring(0, 1);
            int probanext = int.Parse(nowy1);
            Console.WriteLine(probanext);
            Console.ReadLine();

Wszystko jest fajnie pokazuje mi klawisz 1, 2,3,4 itd. gdy jednak za komentuje Console.WriteLine(nowy); czyli kod wygląda tak

Console.WriteLine("\n Wybierz swoją kartę...");
            ConsoleKeyInfo ski1 = Console.ReadKey();

            string nowy = ski1.KeyChar.ToString();
            
            string nowy1 = nowy.Substring(0, 1);
            int probanext = int.Parse(nowy1);
            Console.WriteLine(probanext);
            Console.ReadLine();
 

to dostaje 11,22,33,44 itd.

Może ktoś mi to wytłumaczyć, bo normalnie zgłupiałem jak to zobaczyłem

0

W pierwszym przypadku widzisz cyfrę, którą wcisnąłeś, cyfrę wyświetloną przez: Console.WriteLine(nowy); (w tej samej linijce) oraz cyfrę wyświetloną przez 'Console.WriteLine(probanext);'.

W drugim przypadku masz tylko cyfrę wciśniętą, oraz cyfrę z 'Console.WriteLine(probanext);`, obie w jednej linijce.

1

W pierwszym kodzie wyświetlane jest:

33
3

Pierwsza 3 to ta którą wpisałeś do konsoli, kolejna bierze się stąd Console.WriteLine(nowy); i jednocześnie przechodzi do następnej linii, no i trzecia trójka to: Console.WriteLine(probanext);

W drugim wyświetla się:

33

Pierwszą trójkę sam wpisujesz, drugą wypisujesz tym Console.WriteLine(probanext); i przechodzisz do nowej linii.

Ja nie wiem jak ty otrzymujesz te outputy o których piszesz 1,2,3,4 bo na pewno nie kodem który wkleiłeś.

0

Ok wszystko działa, dzięki a kod wygląda tak, nie wiem czy dobrze wybieram z Dictionary ale wszystko działa

 
Console.WriteLine("\n Wybierz swoją kartę...");

            while (true)
            {
                ConsoleKeyInfo ski = Console.ReadKey();
                Console.Clear();

                    int choosenchar = 1;
                    try
                    {
                        choosenchar = int.Parse(ski.KeyChar.ToString());

                                if (networkcarts.Count >= choosenchar)
                                {
                                    Console.WriteLine("Wybrałeś karte " + choosenchar + " - " + networkcarts[choosenchar].ToString());
                                    break;
                                }
                                else
                                {
                                    Console.WriteLine("Nie ma takiej karty wybierz jeszcze raz \n");
                                }
                        
                    }
                    catch (FormatException)
                    {
                        Console.WriteLine("\n");
                        Console.WriteLine("Podałeś złą liczbę. Spróbuj jeszcze raz");
                    }
            }
1

Mógłbyś zamiast bloku try catch użyć int.TryParse. Do tego twoja pętla nigdy się nie kończy.
Ogólnie nie rozumiem tego co to ma robić, ale jak tobie się podoba to niech tak będzie :D

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