Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C#: WriteLine ja FormatException

Sivun loppuun

Alkaja [22.09.2013 01:24:00]

#

(Mod. vaihtoi otsikon, kun todellinen ongelma selvisi.)

Miten saa laskuoperaattoreita, +, %,/ ja * vertailtua keskenään if- lauseen ehdoissa?

Metabolix [22.09.2013 01:34:31]

#

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.

Alkaja [22.09.2013 11:33:25]

#

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.

Metabolix [22.09.2013 12:09:12]

#

Koodissasi on silloin jokin virhe. Varmaan kannattaa kertoa, mitä virhettä se ilmoittaa ja mitä koodissa on siinä kohti.

Alkaja [22.09.2013 12:45:00]

#

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]
#

Metabolix [22.09.2013 12:46:01]

#

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.

Alkaja [22.09.2013 13:19:38]

#

Alan taas olemaan sokea omalle virheelleni.

Metabolix [22.09.2013 13:43:39]

#

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.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta