Trädvy Permalänk
Medlem
Registrerad
Jul 2019

Addera ihop två olika tal C#

Har precis hoppat från C++ till C# så det är lite bökigt för mig just nu.
Hur sjutton adderar man ihop med två olika tal?

Jag fick error istället när jag kodat ihop följande

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace testing { class Program { static void Main(string[] args) { Console.WriteLine("Skriv ett tal"); string tal1 = Console.ReadLine(); Console.WriteLine("Skriv ett tal till"); string tal2 = Console.ReadLine(); Console.WriteLine("Summan blir: " + (tal1 + tal2)); Console.ReadKey(); } } }

Trädvy Permalänk
Sjusovarn
Registrerad
Feb 2017

Varför använder du string och inte int?

Trädvy Permalänk
Medlem
Registrerad
Jul 2019
Skrivet av My2nd:

Varför använder du string och inte int?

Om jag använder int då får jag "Error: Cannot implicitly convert type 'string' to 'int'"

Trädvy Permalänk
Medlem
Plats
Ulricehamn
Registrerad
Jun 2013
Skrivet av Programmmare:

Om jag använder int då får jag "Error: Cannot implicitly convert type 'string' to 'int'"

All inmatning i konsol är av typen string. Vi måste omvandla den inmatade stringen till int med hjälp av Int.Parse.

namespace ConsoleApplication1 { class Program { static void Main(string[] args) { Console.WriteLine("Skriv ett tal"); int tal1 = int.Parse(Console.ReadLine()); Console.WriteLine("Skriv ett tal till"); int tal2 = int.Parse(Console.ReadLine()); Console.WriteLine("{0} {1}","Svaret blir", tal1 + tal2); Console.ReadLine(); } } }

Ens signatur blir aldrig riktigt bra hur man än gör.

Trädvy Permalänk
Sjusovarn
Registrerad
Feb 2017

@Programmmare: Inte heller jättevan vid C#, men testa något i denna stilen?

Console.WriteLine("Summan blir: " + Convert.ToInt32(tal1 + tal2));

Trädvy Permalänk
Medlem
Registrerad
Jun 2004

Vill tillägga att svaret som @Cenorida skrev kommer krascha om inmatningen inte är ett tal.

Bättre än din.
Tagga mig för svar i trådar.

Trädvy Permalänk
Medlem
Registrerad
Jun 2004
Skrivet av My2nd:

@Programmmare: Inte heller jättevan vid C#, men testa något i denna stilen?

Det där kommer nog inte gå eftersom så som du skriver så sker konverteringen efter att strängarna ska adderas ihop. Vilket är problemet TS har.

Bättre än din.
Tagga mig för svar i trådar.

Trädvy Permalänk
Medlem
Plats
Ulricehamn
Registrerad
Jun 2013
Skrivet av gwingis:

Vill tillägga att svaret som @Cenorida skrev kommer krascha om inmatningen inte är ett tal.

Vill man undvika krash får man använda sig av int.TryParse.

Ens signatur blir aldrig riktigt bra hur man än gör.

Trädvy Permalänk
Sjusovarn
Registrerad
Feb 2017

@gwingis: Borde väl gå att använda Convert.ToInt32() på tal1 och tal2 då och ha en int tal3 = (tal1+tal2)?

Trädvy Permalänk
Medlem
Registrerad
Jun 2004

@My2nd: Ja

Bättre än din.
Tagga mig för svar i trådar.

Trädvy Permalänk
Medlem
Registrerad
Jul 2019

Tack allihop för förtydligande.
Inte lätt att hantera med C# när man är van med C++

Trädvy Permalänk
Medlem
Registrerad
Jul 2019
Skrivet av Cenorida:

All inmatning i konsol är av typen string. Vi måste omvandla den inmatade stringen till int med hjälp av Int.Parse.

namespace ConsoleApplication1 { class Program { static void Main(string[] args) { Console.WriteLine("Skriv ett tal"); int tal1 = int.Parse(Console.ReadLine()); Console.WriteLine("Skriv ett tal till"); int tal2 = int.Parse(Console.ReadLine()); Console.WriteLine("{0} {1}","Svaret blir", tal1 + tal2); Console.ReadLine(); } } }

Har du eller ni andra lust att förklara varför det är 0 och 1?

Trädvy Permalänk
Medlem
Registrerad
Mar 2016
Skrivet av Programmmare:

Tack allihop för förtydligande.
Inte lätt att hantera med C# när man är van med C++

Det går inte att köra string + string som du vill göra i C++ heller.

Trädvy Permalänk
Medlem
Plats
Umeå
Registrerad
Apr 2009
Skrivet av Programmmare:

Har du eller ni andra lust att förklara varför det är 0 och 1?

0 och 1 är endast placeholders för tal1 och tal2.

Chassi: Fractal Design Define R3, Titanium CPU: Intel Core i7 7700K 4.8 GHz
MoBo: Gigabyte GA-Z270-Gaming K3 GPU: Sapphire RX Vega 64 8GB
RAM: Corsair LPX 16GB CL15 3000Mhz VENGEANCE SSD: Samsung 750 EVO 500GB
HDD: 500GB Seagate Barracuda 7200rpm PSU: LEPA B1000-MB

Trädvy Permalänk
Medlem
Registrerad
Jul 2019
Skrivet av huff:

Det går inte att köra string + string som du vill göra i C++ heller.

Nej, det har jag inte påstått. Jag har dessvärre bara blivit lite förvirrad av C#-språket och jag antog att man använder inte int men det kunde man visst göra då måste man omvandla med hjälp av convert.intto32 eller liknande.

Det gör man inte på C++

Trädvy Permalänk
Medlem
Registrerad
Jun 2004

@Programmmare konsolinput i c++ är väl strängar det med? Går väl inte att göra string1+string2 i c++ heller?

Bättre än din.
Tagga mig för svar i trådar.

Trädvy Permalänk
Medlem
Registrerad
Jun 2012
Skrivet av gwingis:

@Programmmare konsolinput i c++ är väl strängar det med? Går väl inte att göra string1+string2 i c++ heller?

Beror på vilken metod man använder, std::cin kan användas direkt med integers. cin kan användas för char och strängar med, men för strängar är det något enklare att använda std::getline.

CPU: AMD Ryzen 1600 3.8GHz Ram: Corsair 3000MHz 16GB Moderkort: Asus Prime B350 Plus Grafikkort: RTX 2060 PSU: EVGA Supernova G3 750W

Trädvy Permalänk
Medlem
Plats
Lund
Registrerad
Nov 2010

@Programmmare: Det finns ett enklare sätt att skriva ut strängar idag, med $
Console.WriteLine("{0} {1}","Svaret blir", tal1 + tal2);
Console.WriteLine($"Svaret blir {tal1 + tal2}");

Men andra raden är enklare att läsa!

https://docs.microsoft.com/en-us/dotnet/csharp/language-refer...

Trädvy Permalänk
Medlem
Registrerad
Apr 2019
Skrivet av Programmmare:

Har du eller ni andra lust att förklara varför det är 0 och 1?

Console.WriteLine("{0} {1}","Svaret blir", tal1 + tal2);

Första strängen "{0} {1}" är det som kommer att skrivas ut, "Svaret blir" och tal1 + tal2 är parametrar som läggs in i 0 respektive 1.

Så "Svaret blir" läggs in istället för {0} och sedan beräknas tal1 + tal2 och summan läggs in istället för {1}.

Men som det sagts längre upp rekommenderar jag starkt att använda ett enklare sätt och det är med $"".

Du skriver hela strängen och lägger in variabler med {}.

int tal1 = 10; int tal2 = 20; Console.WriteLine($"Talen {tal1} + {tal2} ger summan {tal1+tal2}"); // Genererar texten "Talen 10 + 20 ger summan 30".

Med den tidigare hanteringen hade du behövt göra på följande sätt:

int tal1 = 10; int tal2 = 20; Console.WriteLine("Talen {0} + {1} ger summan {2}", tal1, tal2, tal1+tal2);

Trädvy Permalänk
Medlem
Registrerad
Jun 2008

Om du är van c++ användare så borde du ha koll på grundläggande typer som string, char, int, boolean osv.

Som tidigare påpekats så Console.ReadLine() ger tillbaka typen STRING vilket används för text.
För att göra matematiska operationer så behöver du omvandla din input till en INT.

int.Parse() är en bra början men tänk på att om du skriver något annat än siffror så kommer den smälla även där så kan vara bra att ha lite hängsle och livrem med int.TryParse().

C# skiljer sig inte så mkt från C++ utan borde vara ganska smärtfritt att gå åt det hållet

Är dock fundersam över vad det är för fel du får?

string foo = "1"
string bar = "2"

string result = foo+bar;
result är nu "12"

int foo =1;
int bar=2;
int result = foo+bar;
result är nu 3

Alltså borde din kod funka bara att den lägger ihop dina strängar

Fractal Design Node 304 -> ASUS ROG STRIX Z370-I GAMING ->i5 8600K -> be quiet! Pure Rock -> ASUS GTX 1070 8GB DUAL OC -> Corsair 16GB DDR4 2666MHz CL16 Vengeance LPX -> Seasonic FOCUS Plus 650W Gold -> Samsung 960 EVO 500GB

Trädvy Permalänk
Entusiast
Testpilot
Plats
Chalmers
Registrerad
Aug 2011
Skrivet av L.Forsgren:

0 och 1 är endast placeholders för tal1 och tal2.

Nä, i det aktuella exemplet kommer {0} ersättas med "Svaret blir" och {1} med tal1 + tal2.

Skrivet av maximm:

@Programmmare: Det finns ett enklare sätt att skriva ut strängar idag, med $

Console.WriteLine("{0} {1}","Svaret blir", tal1 + tal2); Console.WriteLine($"Svaret blir {tal1 + tal2}");

Men andra raden är enklare att läsa!

Mycket bra förslag, tycker jag! (La till [code]-taggar i citatet, vilket jag rekommenderar när man postar kod.)

Skrivet med hjälp av Better SweClockers

Trädvy Permalänk
Medlem
Plats
Umeå
Registrerad
Apr 2009

@Alling: absolut! Den är på mig som inte verkar kunna läsa

Chassi: Fractal Design Define R3, Titanium CPU: Intel Core i7 7700K 4.8 GHz
MoBo: Gigabyte GA-Z270-Gaming K3 GPU: Sapphire RX Vega 64 8GB
RAM: Corsair LPX 16GB CL15 3000Mhz VENGEANCE SSD: Samsung 750 EVO 500GB
HDD: 500GB Seagate Barracuda 7200rpm PSU: LEPA B1000-MB