Permalänk

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(); } } }

Permalänk
Sjusovarn

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

Permalänk
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'"

Permalänk
Medlem
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(); } } }

Visa signatur

AMD Ryzen 7 5800X3D | EVGA GeForce RTX 3080 10GB FTW3 ULTRA | ASUS ROG Strix B450-F Gaming | Corsair RM750X V2 | Crucial Ballistix Sport LT 3200MHz 16GB | Samsung 980 Pro 1TB | Crucial MX500 2TB | NZXT H500

Permalänk
Sjusovarn

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

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

Permalänk
Medlem

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

Visa signatur

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

Permalänk
Medlem
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.

Visa signatur

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

Permalänk
Medlem
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.

Visa signatur

AMD Ryzen 7 5800X3D | EVGA GeForce RTX 3080 10GB FTW3 ULTRA | ASUS ROG Strix B450-F Gaming | Corsair RM750X V2 | Crucial Ballistix Sport LT 3200MHz 16GB | Samsung 980 Pro 1TB | Crucial MX500 2TB | NZXT H500

Permalänk
Sjusovarn

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

Permalänk
Medlem

@My2nd: Ja

Visa signatur

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

Permalänk

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

Permalänk
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?

Permalänk
Medlem
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.

Permalänk
Medlem
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.

Permalänk
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++

Permalänk
Medlem

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

Visa signatur

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

Permalänk
Medlem
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.

Permalänk
Medlem

@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...

Permalänk
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);

Permalänk
Medlem

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

Visa signatur

Fractal Design Node 304 -> ASUS ROG STRIX Z370-I GAMING ->i5 8600K -> be quiet! Pure Rock -> MSI GeForce RTX 4070 VENTUS 2X E 12G OC -> Corsair Vengeance LPX 3200 32GB -> Seasonic FOCUS Plus 650W Gold -> Samsung 960 EVO 500GB -> 2 * Western Digital Black 2 TB -> Samsung 850 EVO Basic SSD 500GB

Permalänk
99:e percentilen
Skrivet av 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.)

Visa signatur

Skrivet med hjälp av Better SweClockers

Permalänk
Medlem

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