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

Proste dodawanie - C#

VPS Starter Arubacloud
0 głosów
333 wizyt
pytanie zadane 18 marca 2019 w C# przez Michał_Warmuz Mądrala (5,830 p.)
otagowane ponownie 18 marca 2019 przez criss

Cześć próbuje napisać. Proste dodawanie w c# i mam problem chodzi mi o to ze nie potrafie pobrać liczby z klawiatury i pomocuj sie ze ze stringa konwertuje na int. wiecie jak moge pobrac liczbe z klawiatury >

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

namespace Proste_dodawanie
{
    class Program
    {
        static void Main(string[] args)
        {
            string t;
            t = Console.ReadLine();

            int ti = int.Parse(t);

            for(int i=0; i<ti; i++)
            {
                string ile;
                int total = 0;

                ile = Console.ReadLine();
                int ilei = int.Parse(ile);

                for(int j=0; j<ilei; j++)
                {
                    string n;
                    n = Console.ReadLine();
                    int ni = int.Parse(n);

                    total += ni;

                }
                Console.WriteLine(total);
            }

        }
    }
}

 

komentarz 18 marca 2019 przez adrian17 Ekspert (344,100 p.)
Nie do końca rozumiem. Z tego co wiem, to jest "zwykły" sposób robienia tego w C#; na oko ten kod jest poprawny.
komentarz 18 marca 2019 przez Michał_Warmuz Mądrala (5,830 p.)
a jak ktos bedzie chciał podać w jednej lini

100 spacja -100 to jak program zamieni to ze stringa na inta ?
komentarz 18 marca 2019 przez Michał_Warmuz Mądrala (5,830 p.)
Bo sędzie pokazuje mi taki błąd błąd wykonania (NZEC)
komentarz 18 marca 2019 przez adrian17 Ekspert (344,100 p.)

A, to SPOJ. No to

Następnie podanych jest n liczb pooddzielanych spacją.

Weź linię i podziel ją na pojedyncze liczby metodą Split - każdą część przekaż do int.Parse i dodaj.

1 odpowiedź

0 głosów
odpowiedź 18 marca 2019 przez niezalogowany

Ciężko się czyta Twój post, ale odpowiem na ile zrozumiałem:

Do wczytywania danych z klawiatury używa się min. polecenia

Console.ReadLine();

Gdyby ktoś chciał wprowadzić inną wartość niż liczbową to można użyć

Int32.TryParse(value, out number)

Funkcja zwraca true lub false, jeśli true to zmienna number jest naszym intigerem.

Zmodyfikowałem i trochę poprawiłem Twój kod tak na szybko, żebyś mógł zobaczyć o co chodzi. Oczywiście daleko temu do "doskonałości".

static void Main(string[] args)
        {
            string t;
            Console.WriteLine("Podaj liczbę (pętla nr 1)");
            t = Console.ReadLine();
            int ti;
            if (!Int32.TryParse(t, out ti))
            {
                Console.WriteLine("To nie jest liczba ");
                ti = 1;
            }       

            for (int i = 0; i < ti; i++)
            {
                string ile;
                int total = 0;

                Console.WriteLine("Podaj liczbę 2");
                ile = Console.ReadLine();
                int ilei;
                if (!Int32.TryParse(ile, out ilei))
                {
                    Console.WriteLine("To nie jest liczba (pętla nr 2)");
                    ilei = 1;
                }             

                for (int j = 0; j < ilei; j++)
                {
                    string n;
                    Console.WriteLine("Podaj liczbę do dodania");
                    n = Console.ReadLine();
                    int ni;
                    if (!Int32.TryParse(n, out ni))
                    {
                        Console.WriteLine("To nie jest liczba");
                        ni = 1;
                    }

                    total += ni;
                }
                Console.Write("Total: ");
                Console.WriteLine(total);
                Console.ReadKey();
            }
        }

 

komentarz 18 marca 2019 przez Michał_Warmuz Mądrala (5,830 p.)

Oki dzieki zrobiłem tak ale wyskakuje blad odpowiedzi to przez to ze musze zrobić odzielić metoda split ?

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

namespace Proste_dodawanie
{
    class Program
    {
        static void Main(string[] args)
        {
            string t;
            t = Console.ReadLine();
            int ti;
            Int32.TryParse(t, out ti);

            for(int i=0; i<ti; i++)
            {
                string ile;
                int total = 0;

                ile = Console.ReadLine();
                int ilei;
                Int32.TryParse(ile, out ilei);

                for(int j=0; j<ilei; j++)
                {
                    string n;
                    n = Console.ReadLine();
                    int ni;
                    Int32.TryParse(n, out ni);

                    total += ni;

                }
                Console.WriteLine(total);
            }

        }
    }
}

 

komentarz 19 marca 2019 przez Siemił Mądrala (7,380 p.)

Znasz konstrukcję 

if(test)
{
    //rób coś jeśli test jest prawdą...
}
else
{
   //rób coś jeśli test jest fałszem...
}

funkcja Int32.TryParse() zwraca wartość true jeśli uda się skonwertować a false jeśli się nie uda skonwertować na inta. W swoim kodzie tego testu nigdzie nie używasz. Tobie nawet jak się nie uda sparsować na inta to zmienne 'ti' i 'ile' są używane, ale bez wartości bo ich nie inicjujesz.

komentarz 19 marca 2019 przez niezalogowany

@Siemił,

Jesteś pewny?

komentarz 19 marca 2019 przez Siemił Mądrala (7,380 p.)
Jak uważasz że się mylę to napisz gdzie? Niech też się czegoś nauczę.
komentarz 19 marca 2019 przez niezalogowany

@Siemił,

Jak rozumiem odniosłeś się do mojej kontrukcji?

            int ti;
            if (!Int32.TryParse(t, out ti))
            {
                Console.WriteLine("To nie jest liczba ");
                ti = 1;
            }       

 

komentarz 19 marca 2019 przez niezalogowany

@Michał_Warmuz,

Przeczytaj ten wątek

komentarz 19 marca 2019 przez Siemił Mądrala (7,380 p.)

Odniosłem się do komentarza @ Michał_Warmuz .

komentarz 19 marca 2019 przez niezalogowany

@Siemił,

A to przepraszam myślałem, że chodzi o mój kod.

Masz rację, że tu powinien być warunek.

Int32.TryParse(ile, out ilei);

Choć jak użytkownik wprowadzi prawidłową wartość to to zadziała. Ale tak nie powinno się robić.

komentarz 27 marca 2019 przez Bastek1502 Nowicjusz (100 p.)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace Proste_dodawanie
{
    class Program
    {
        static void Main(string[] args)
        {
            var readLine = Console.ReadLine();
            var parsedNumber = int.Parse(readLine);
            
            for(int i=0; i<parsedNumber; i++)
            {
                int total = 0;
 
                var roundsCount = Console.ReadLine();
                var lapsParsed = int.Parse(roundsCount);
 
                for(var j=0; j<lapsParsed; j++)
                {
                    var readKey2 = Console.ReadLine();
                    var parsedNumber2 = int.Parse(readKey2);
 
                    total += parsedNumber2;
 
                }
                Console.WriteLine(total);
            }
        }
    }
}

Tutaj wkleilem troche poprawiony kod.
1. Jesli chcialbys skorzystac z logiki, gdzie podalbys na wejscie np. 100 200 300 i bedziesz przechowywal to w postaci tablicy np.:

 

  var readLine2 = Console.ReadLine();
            var listOfStrings = readLine2.Split(" ");
            foreach (var number in listOfStrings)
            {
                if (!int.TryParse(number, out var numberParsed))
                    throw new InvalidOperationException();
                
                       //do something with numberParsed.
                       //
            }

W miejsce InvalidOperationException mozesz to rownie dobrze inaczej obsluzyc. :)

 

Podobne pytania

0 głosów
1 odpowiedź 2,108 wizyt
pytanie zadane 16 kwietnia 2023 w C# przez Whyyy Nowicjusz (240 p.)
+1 głos
1 odpowiedź 317 wizyt
pytanie zadane 20 grudnia 2021 w C# przez mateusz45 Gaduła (3,240 p.)
0 głosów
1 odpowiedź 165 wizyt
pytanie zadane 10 czerwca 2020 w C# przez Bartek12 Mądrala (5,510 p.)

92,455 zapytań

141,263 odpowiedzi

319,099 komentarzy

61,854 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...