• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

c# Zgaduj zgadula przepianie z c++ na c#

Object Storage Arubacloud
0 głosów
349 wizyt
pytanie zadane 8 lutego 2019 w C# przez Oli_weirdo_ Nowicjusz (210 p.)

Cześć, przepisuję sobie z c++ na c# kod z "zgaduj zgadula" z kursu 4 c++ od Zelenta. Problem w tym że w konsoli, po wpisaniu drugiej liczby program mi się wysypuje.

Jestem początkująca, więc rozwiązanie może wydawać się banalne, ale na nie jeszcze nie wpadłam, ktoś ma pomysł?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Cryptography.X509Certificates;
using System.Text;
using System.Threading.Tasks;
using System.Timers;


namespace zgadywanka
{
    class Program
    {
        static void Main(string[] args)
        {
            int choice;

            Console.WriteLine(" I think about a number between 1 and 100,");

            Random number = new Random();
            int a = number.Next(1, 100);
            Console.WriteLine(a);

            Console.WriteLine("guess what number is it?");
            

            do {
                choice = Console.Read();
                if (choice == a)
                    Console.WriteLine("Correct Number! Congratulations, You win");


                else if (choice < a)
                
                    Console.WriteLine("It`s too little, try again!");
  

                else if (choice > a)
                
                    Console.WriteLine("It`s too much, Try again!");
               

                Console.Read();
                return;

            } while (choice == a);
        }
      
    }
    
}

 

2 odpowiedzi

+2 głosów
odpowiedź 8 lutego 2019 przez Dorion300 Szeryf (90,250 p.)
wybrane 9 lutego 2019 przez Oli_weirdo_
 
Najlepsza

1. Console.Read(); zwraca wartość Int32 z kolejnego znaku na wejściu.

A więc nie otrzymujesz wpisanej liczby a wartość znaku char w postaci int32.

Zalecam wykorzystanie Console.ReadLine() aby oczytać całą wartość wejściową (a nie tylko pierwszy znak) i przekonwertować string do postaci Int32.  Na przykład wykorzystując metodę Int32.Parse(<wartość>);

2. Przenieś Console.Read() który występuje przed return; na koniec kodu po pętli while().

3. Skasuj:

return;

return powoduje zakończenie się funkcji, czyli w tym przypadku całego programu. Gdyż wszystko dzieje się we funkcji Main();

4. Powinno być while(choice != a), gdyż jeśli to zdanie jest prawdziwe (czyli wartości nie są równe) to wykonuje pętlę jeszcze raz.

 

komentarz 9 lutego 2019 przez Oli_weirdo_ Nowicjusz (210 p.)

Dzięki, zmieniłam wszytko o czym pisałeś, jednak w momencie gdy moja odpowiedź jest za pierwszym razem za duża, to mi potem w kółko wypisuje program " too much", niezależnie od następnych odpowiedzi, i na odwrót, natomiast gdy zgadnę to output jest taki, jaki powinien być.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Cryptography.X509Certificates;
using System.Text;
using System.Threading.Tasks;
using System.Timers;


namespace zgadywanka
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine(" I think about a number between 1 and 100,");

            Random number = new Random();
            int a = number.Next(1, 100);
           // Console.WriteLine(a);
     
            Console.WriteLine("guess what number is it?");
         

            var choice = int.Parse(Console.ReadLine());


            do
            {
 

                if (choice == a)
                {
                    Console.WriteLine("Correct Number! Congratulations, You win in! ");
                    Console.ReadLine();
                }


                else if (choice < a)
                {
                    Console.WriteLine("It`s too little, try again!");
                    Console.ReadLine();
                }


                else if (choice > a)
                { 
                    Console.WriteLine("It`s too much, Try again!");
                    Console.ReadLine();
                }



            }while (choice != a);
            

        }


    }

 

komentarz 9 lutego 2019 przez gagyn Stary wyjadacz (11,050 p.)
edycja 9 lutego 2019 przez gagyn

Ponieważ tylko raz pobierasz liczbę z klawiatury.

Usuń Console.ReadLine() ze wszystkich ifów w pętli.

Przenieś linijkę:

var choice = int.Parse(Console.ReadLine());

Na początek pętli do while, aby pobierać znak w każdej iteracji pętli.

0 głosów
odpowiedź 8 lutego 2019 przez DeBos123 Nałogowiec (44,950 p.)
Wykonujesz pętlę raz, a później dopóki liczba podana przez użytkownika jest równa tej wylosowanej.

Podobne pytania

0 głosów
5 odpowiedzi 266 wizyt
pytanie zadane 26 kwietnia 2016 w C i C++ przez Nast Początkujący (270 p.)
0 głosów
1 odpowiedź 248 wizyt
pytanie zadane 23 kwietnia 2016 w C# przez timrh Mądrala (6,030 p.)
0 głosów
1 odpowiedź 125 wizyt
pytanie zadane 11 września 2018 w C# przez ayo1001 Obywatel (1,890 p.)

92,537 zapytań

141,377 odpowiedzi

319,456 komentarzy

61,922 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...