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

Jak przekonwertować String na Int W C#?

VPS Starter Arubacloud
+1 głos
1,972 wizyt
pytanie zadane 5 stycznia 2021 w C# przez MateuszFisch Początkujący (250 p.)

Hej, mam spory problem. Uczę się programować w C# i chciałbym przekonwertować tekst wpisany w okienko, by tekst wpisany został dodany np do 4. 
NP: "Wpisz dowolną liczbę a ja dodam do czterech: 
Ja: Wpisuję 2
"Wynik: 6:. 
Moje działania macie tutaj: 

Chce po prostu zrobić taki bardzo prosty kalkulator, który dodałby dowolną liczbę do 4 i tyle. 

3 odpowiedzi

0 głosów
odpowiedź 5 stycznia 2021 przez adrian17 Ekspert (349,380 p.)
edycja 5 stycznia 2021 przez adrian17

 

int x = int.Parse(tekst);
string t = x.ToString();

 

komentarz 5 stycznia 2021 przez MateuszFisch Początkujący (250 p.)
Można bardziej wyjaśnić?
(tekst) to ma być to co zostanie przeze pisane w konsole a następnie dodane czy jak?
komentarz 5 stycznia 2021 przez adrian17 Ekspert (349,380 p.)
Jeśli masz kawałek tekstu (np z pola tekstowego) i chcesz go zamienić na liczbę całkowitą (np żeby ją dodać), używasz int.Parse.

Jeśli masz liczbę i chcesz ją użyć jako tekst, np połączyć z innym stringiem, używasz ToString().
komentarz 5 stycznia 2021 przez MateuszFisch Początkujący (250 p.)

Robię to co piszesz i to nie działa.. 

           System.Console.WriteLine("Wpisz liczbę");
            string wpisana = System.Console.ReadLine();
            int x = int.Parse(wpisana);
            string t = x.ToString();
            int t = 20 + wpisana;
            System.Console.WriteLine(t);

 

komentarz 5 stycznia 2021 przez adrian17 Ekspert (349,380 p.)
Na razie to masz dwie zmienne o tej samej nazwie ;)
0 głosów
odpowiedź 5 stycznia 2021 przez Snejki Stary wyjadacz (14,520 p.)
edycja 5 stycznia 2021 przez Snejki

Jeśli masz pewność, że wprowadzony ciąg znaków jest liczbą typu int, to wtedy: 

var parsed = Int32.Parse("12")

Jeśli nie masz tej pewnośći, to wtedy:

int parsed = 0;
var isParsed = Int32.TryParse("12", out parsed);

 

komentarz 5 stycznia 2021 przez adrian17 Ekspert (349,380 p.)

Jeśli nie masz tej pewnośći, to wtedy:

To nie jest "jeśli masz pewność / jeśli nie masz".

Jedno rzuca wyjątek, drugie daje boola. Oba to jakieś sposoby obsługi błędu; pierwszy byłby wręcz lepszy jeśli spodziewasz się potencjalnych błędów, bo wyjątki mają dokładniejszą informację dlaczego się nie udało.

Plus, AFAIK w drugim kodzie brakuje Ci `out` i ignorujesz informację o błędzie.

komentarz 5 stycznia 2021 przez MateuszFisch Początkujący (250 p.)

@Snejki,  Można bardziej jaśniej? 
Bo chodzi mi o to by na INT zostało zamienione to co wpiszę w konsolę.
Czyli ze string na int.

I następnie by to przekonwertowane zostało dodane do jakieś liczby, np do czterech i wyświetlony wynik. 

komentarz 5 stycznia 2021 przez Edek Ziemiński Początkujący (300 p.)
edycja 5 stycznia 2021 przez Edek Ziemiński

@adrian17, ile jesteś w stanie wymienić potencjalnych powodów niepowodzenia parsowania stringa do inta, czy właściwie do jakiegokolwiek innego typu prymitywnego? Bo ja osobiście jeden podstawowy, który ewentualnie można rozbić na kilka mniejszych (choć nie do końca wiem po co): wprowadzona wartość nie spełnia kryteriów wymaganych przez typ docelowy. Czy nawet jeśli znajdziesz więcej takich powodów, to chcesz mi powiedzieć, że wprowadzasz obsługę różnych typów wyjątków przy parsowaniu stringa? To ta prosta wydawać by się mogła operacja musi się rozrosnąć do jakichś 20-30 linii kodu, zupełnie niepotrzebnie. Jakby co piszę bez spiny - nie jestem żadnym mentorem w tej dziedzinie, chętnie poznam więcej szczegółów, więc jeśli się mylę, to wyprowadź mnie z błędu. Nie chcę zgrywać eksperta, bo uważam, że do poziomu eksperta wiele mi brakuje. Ale też mimo wszystko wśród osób, które uznaję za prawdziwych ekspertów (żeby nie było zaraz dyskredytowania, jeden znajomy organizował wielokrotnie międzynarodowe konferencje programistyczne, drugi jest np. mentorem w dość popularnej dotnetowej grupie) słyszę raczej, że wszędzie tam gdzie można uniknąć opierania swoich rozwiązań na wyjątkach, tam po prostu należy to zrobić. A alternatywą powinna być np. struktura Either<TL, TR>. Za to w przypadku parsowania stringa metoda TryParse jest zdecydowanie wystarczająca - po co sobie komplikować życie? Nie widzę żadnej wartości dodanej z takiej komplikacji.

Co do sprawdzania wyniku parsowania  - w niektórych sytuacjach jest to potrzebne, w innych nie. Fakt, że w przykładzie lepiej było pokazać ze sprawdzaniem, więc ta uwaga do autora odpowiedzi jest słuszna.

Weźmy też pod uwagę, że o radę pyta osoba początkująca, która chce się po prostu dowiedzieć jak zrobić prostą rzecz. Bez przesady, że musi się od razu nauczyć obsługi wyjątków i wszystkich best practice z tym związanych, żeby sparsować string do inta. To może jedynie zniechęcić do nauki. Chyba żaden z nas w ten sposób się nie uczył parsować string?

Pozdrawiam serdecznie. Serio pisałem bez spiny i chętnie się dowiem, czy sam jestem w błędzie.

komentarz 5 stycznia 2021 przez adrian17 Ekspert (349,380 p.)

Weźmy też pod uwagę, że o radę pyta osoba początkująca, która chce się po prostu dowiedzieć jak zrobić prostą rzecz. Bez przesady, że musi się od razu nauczyć obsługi wyjątków i wszystkich best practice z tym związanych, żeby sparsować string do inta.

Przeciwnie, nie musi. Załóż że osoba pierwszy raz pisze taki kod i nie przejmuje się błędami:

var parsed = Int32.Parse("12")

int parsed = 0;
Int32.TryParse("12", out parsed);

który jest łatwiejszy? Pierwszy.

A teraz co się stanie, jeśli przypadkiem wpisze "xyz"?

W drugim stanie się "nic", po prostu wartość `parsed` będzie dziwna i początkujący może się długo zastanawiać dlaczego 150 linii dalej widzi wartość zmiennej `parsed` równą 0.

A w pierwszym:

komentarz 5 stycznia 2021 przez adrian17 Ekspert (349,380 p.)

ile jesteś w stanie wymienić potencjalnych powodów niepowodzenia parsowania stringa do inta

Z głowy, trzy najczęstsze: null, nie-liczbowy string, liczbowy ale poza zasięgiem. W szczególności ten ostatni nie musi oznaczać że musisz go obsłużyć - tylko że być może masz złe typy w programie i potrzebujesz większych intów :)

komentarz 5 stycznia 2021 przez MateuszFisch Początkujący (250 p.)

@adrian17,  A co oznacza ta 12? Bo ja zamiast tego, chce właśnie to co wpiszę (obojętnie co) się przekonwertowało.
Chce wpisać nap 8 i chce by to przekonwertowało na na int. 

Bo jak wpiszę int coś = = System.Cosole.ReadlLine(): to nie zadziała bo musi być string a nie int a więc chce te string przekonwertować na int i chce by to co zostanie wpisane dodało się np do 6 i wyświetliłby mi wynik na ekranie, 

komentarz 5 stycznia 2021 przez Edek Ziemiński Początkujący (300 p.)

Właściwie mi się przypomniało, że kiedyś napisałem o tym wpis na bloga, pisany właśnie z myślą o osobach początkujących. Sprawdź sekcję "Pobieranie innych typów niż string" - tam jest pokazany przykład z parsowaniem.

komentarz 5 stycznia 2021 przez Edek Ziemiński Początkujący (300 p.)

@adrian17, OK. Pytanie czy do każdego z tych przypadków robisz obsługę innego rodzaju wyjątku i proste drzewko decyzyjne z 2 opcjami (wartość prawidłowa/nieprawidłowa) rozwidlasz dodatkowo na jeszcze 2 kolejne opcje? Jaki jest z tego benefit? null jest dość mało prawdopodobny jeśli input pochodzi z konsoli - może wynikać jedynie z błędu w kodzie, więc programista i tak do tego dojdzie. Ale rozumiem Twój tok myślenia - chodzi Ci o to, że pytający będzie bardziej świadomy co się dzieje, jeśli wyskoczy mu wyjątek. Może i słusznie choć nadal nie do końca się zgadzam ;) ale no cóż... kwestia gustu :) zresztą tak jak mówiłem - ekspertem nie jestem, może jeszcze się przekonam ny zmienić zdanie :)

komentarz 5 stycznia 2021 przez adrian17 Ekspert (349,380 p.)

OK. Pytanie czy do każdego z tych przypadków robisz obsługę innego rodzaju wyjątku i proste drzewko decyzyjne z 2 opcjami

Nie. Mogę go w ogóle nie obsługiwać albo obsługiwać "leniwie" łapiąc wszystkie wyjątki (wtedy obsługa błędu jest taka sama jak przy TryParse). Mam po prostu więcej opcji do wyboru, plus jest bezpieczniej jeśli coś zignoruję chcący lub niechcący.

1
komentarz 5 stycznia 2021 przez Snejki Stary wyjadacz (14,520 p.)

@adrian17,  racja, przez przeoczenie zignorowałem informowanie użytkownika o błędzie, mogłem dopisać prostego ifa z jakimś komunikatem dla uzytkownika. Co do wyjątków, to uważam, że powinno się ich unikać/zabezpieczać przed ich rzucaniem, ponieważ są one po prostu dość kosztowne.

0 głosów
odpowiedź 6 stycznia 2021 przez VBService Ekspert (255,840 p.)
edycja 6 stycznia 2021 przez VBService

Moja propozycja, mam nadzieję, że w miarę prosta do zrozumienia, a wykonująca miarę "polecone" zadanie. wink


using System;

class HelloNumbers
{
    static void Main()
    {
        const double NUMBER_ = 4;
        Console.Write("Wpisz dowolną liczbę: ");

        while (true)
        {            
            string number_string = Console.ReadLine();
            double number = 0;

            if (number_string != null && double.TryParse(number_string, out number))
            {
                Console.WriteLine("{0:F2} + {1:F2} = {2:F2}", number, NUMBER_, (number + NUMBER_));
                break;
            }
            else
            {
                Console.Write("Proszę podać liczbę: ");
            }
        }

        Console.WriteLine("Naciśnij dowolny klawisz, aby zakończyć");
        Console.ReadKey();

    }
}

 

Podobne pytania

0 głosów
2 odpowiedzi 1,403 wizyt
0 głosów
1 odpowiedź 309 wizyt
pytanie zadane 22 grudnia 2021 w C i C++ przez Dobdo Użytkownik (570 p.)

93,005 zapytań

141,970 odpowiedzi

321,249 komentarzy

62,341 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

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...