• 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#

0 głosów
82 wizyt
pytanie zadane 8 lutego w C# i .NET przez Oli_weirdo_ Nowicjusz (150 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 przez Dorion300 Szeryf (90,070 p.)
wybrane 9 lutego 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 przez Oli_weirdo_ Nowicjusz (150 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 przez gagyn Mądrala (6,160 p.)
edycja 9 lutego 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 przez DeBos123 Nałogowiec (34,670 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
1 odpowiedź 192 wizyt
pytanie zadane 23 kwietnia 2016 w C# i .NET przez timrh Mądrala (6,050 p.)
0 głosów
5 odpowiedzi 144 wizyt
pytanie zadane 26 kwietnia 2016 w C i C++ przez Nast Początkujący (270 p.)
0 głosów
1 odpowiedź 234 wizyt
pytanie zadane 17 marca 2017 w C# i .NET przez Sidzej Użytkownik (870 p.)
Porady nie od parady
Pytania na temat serwisu SPOJ należy zadawać z odpowiednią kategorią dotyczącą tej strony.SPOJ

65,683 zapytań

112,321 odpowiedzi

237,044 komentarzy

46,657 pasjonatów

Przeglądających: 253
Pasjonatów: 11 Gości: 242

Motyw:

Akcja Pajacyk

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

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...