(Mod. vaihtoi otsikon, kun todellinen ongelma selvisi.)
Miten saa laskuoperaattoreita, +, %,/ ja * vertailtua keskenään if- lauseen ehdoissa?
Ei operaattoreita voi vertailla. Mitähän ihmettä tarkoitat?
Jos tarkoitat, että luet käyttäjältä laskuoperaattorin (metodilla System.Console.ReadLine() tms.) ja haluat selvittää, mikä se on, niin kysymys on yksinkertaisesti merkkien tai tekstien vertailusta – vaikka tekstissä olisi lukuja tai operaattoreita, se on silti ohjelmoinnissa vain tekstiä.
Tekstit (string) kirjoitetaan lainausmerkkeihin ("x") ja merkit (char) heittomerkkeihin ('x'), ja niitä voi vertailla muuttujiin ihan tavallisella yhtäsuuruusvertailulla (==).
string teksti = "tässä voisi olla vaikka plussa"; if (teksti == "+") { System.Console.WriteLine("Onhan siinä plussa."); } else { System.Console.WriteLine("Nyt ei ole plussaa."); }
char merkki = '+'; if (merkki == '+') { System.Console.WriteLine("Yhteenlaskusta varmaan on kyse."); }
Eikö siellä kurssillasi opeteta asioita? Lätkitään vain tehtäviä ilman mitään ohjeita? Jos niin on, kannattaa edes etsiä netistä jokin opas, josta voi lukea alkeet, ettei tarvitse kompastella kysymys kerrallaan eteenpäin.
Aivot eivät oikein toimineet väsyneenä kunnolla ja kysymys muotoilu on huono.
Eli ongelmana on, että kun kysytään laskuoperaattoria käyttäjältä ja tämän jälkeen pitäisi tehdä vertailua. Jostain syystä ilmoittaa virhettä tässä kohtaa ohjelman ajoa.
Koodissasi on silloin jokin virhe. Varmaan kannattaa kertoa, mitä virhettä se ilmoittaa ja mitä koodissa on siinä kohti.
Tähän asti menee hyvin, kun operaattori on annettu ilmoittaa virhettä
Console.Write("Anna ensimmäinen luku: "); int luku = int.Parse(Console.ReadLine()); Console.Write("Anna toinen luku: "); int luku2 = int.Parse(Console.ReadLine()); System.Console.Write("Anna operattori: "); string merkki = System.Console.ReadLine(); if (merkki == "+") { int summa = luku+luku2; System.Console.WriteLine("{0}+{1}={3}", luku, luku2, summa); }
Tämän antaa kun ajaa ohjelman.
Anna ensimmäinen luku: 7
Anna toinen luku: 2
Anna operattori: +
Unhandled Exception: System.FormatException: Index (zero based) must be greater than or equal to zero and less than the size of the argument list.
at System.String.FormatHelper (System.Text.StringBuilder result, IFormatProvider provider, System.String format, System.Object[] args) [0x00000]
at System.String.Format (IFormatProvider provider, System.String format, System.Object[] args) [0x00000]
at System.String.Format (System.String format, System.Object arg0, System.Object arg1, System.Object arg2) [0x00000]
at System.IO.TextWriter.Write (System.String format, System.Object arg0, System.Object arg1, System.Object arg2) [0x00000]
at System.IO.TextWriter.WriteLine (System.String format, System.Object arg0, System.Object arg1, System.Object arg2) [0x00000]
at System.Console.WriteLine (System.String format, System.Object arg0, System.Object arg1, System.Object arg2) [0x00000]
at Valintalauseet.Ohjelma.Main () [0x00000]
#
Alkaja kirjoitti:
Tähän asti menee hyvin, kun operaattori on annettu ilmoittaa virhettä
System.Console.Write("Anna operattori: "); string merkki = System.Console.ReadLine(); if (merkki == "+") {Virheilmoitus: Unhandled Exception: System.FormatException: Index (zero based) must be greater than or equal to zero and less than the size of the argument list.
Virheilmoitus ei mitenkään voi tulla tuosta osasta koodia.
Alan taas olemaan sokea omalle virheelleni.
No niin, muokkasit näköjään viestiäsi ja lisäsit siihen vielä 7 riviä koodia ja tarkemman virheilmoituksen. Nythän näkyy, että virhe on kohdassa "{0}+{1}={3}", jossa pitäisi lukea "{0}+{1}={2}".
Sinänsä pitää ihmetellä, millä perusteella olet olettanut, että vika olisi vertailussa, kun virheilmoituksessa aivan selvästi lukee, että vika on WriteLine-kutsussa. Sitä paitsi pystyisit varmaan tekemään ohjelmasta debug-käännöksen, jossa näkyisi myös virheen rivinumero.
Aihe on jo aika vanha, joten et voi enää vastata siihen.