2009-05-26 9 views
1

Ich mache ein Beispiel aus dem Buch: Die komplette Referenz C# 3.0 von Herbert Schildt. Es geht darum, in Console.WriteLine mit Argumenten zu schreiben. Hier ist das Beispiel: Ich versuche dies aber ich war immer eine Fehlermeldung:Argument Fehler C#

Project1.exe has encountered a problem and needs to be close. We are sorry for the inconvenience. Please tell Microsoft about this problem. Send Error Report or Don't Send. And if I click, I get another error in the command prompt. "Unhandled Exception: System.Format.Exception input string was not in a correct format. 
at System.Text.StringBuilder.AppendFormatError() 
at System.Text.StringBuilder.AppendFormat(IFormatProvider provider,String Format, Object[]args) 
at System.IO.TextWriter.WriteLine(String format, Object arg0) 
at System.IO.TextWriter.SyncTextWriter.WriteLine(String format, Object arg0) 
At Example2.Main() in D:\myPath

Ich bin nicht sicher, ob das Buch fehlerhaft oder ist es mein Code? Ich würde Ihre Hilfe zu schätzen wissen. Dank

One of the easiest ways to specify a format is to describe a template that WriteLine() will use. To do this, show an example of the format that you want, using #s to mark the digit positions. You can also specify the decimal point and commas. For example, here is a better way to display 10 divided by 3:
Console.WriteLine("Here is 10/3: {0:#.##}", 10.0/3.0);
The output from this statement is shown here: Here is 10/3: 3.33

Btw dies ist mein Code wie folgt aussieht:

static void Main() 
    { 
    Console.WriteLine("Here is 10/3: {0:#.##)", 10); 
    } 

Antwort

9

Sie verwenden die falsche Endung Klammer für den Formatparameter.

Beachten Sie die Endklammer) nach #. ##, es sollte a} stattdessen sein (geschweifte Klammern).

Beachten Sie auch, dass Sie die Abteilung ausgelassen haben, und wenn Sie einfach Ihren Code zu dieser (wie auch die Klammer korrigiert) ändern:

static void Main() 
{ 
    Console.WriteLine("Here is 10/3: {0:#.##}", 10/3); 
} 

dann auch eine andere Frage haben Sie gehen, da das Ergebnis, dass sein:

Here is 10/3: 3.00 

der Grund dafür ist, dass 03.10 integer-Division ist, sehen wie oft 3 in 10 vollständig nach oben geht, das 3-fache.

Wenn Sie Gleitkomma Division wollen, teilen Sie 10 durch 3, um 3 und 1/3 zu erhalten, dann müssen Sie sicherstellen, mindestens eine der Zahlen sind Gleitkomma, daher 10,0/3 tun.

+0

Hallo Lasse V. Karlsen, danke ich habe es jetzt bekommen. Ja, es waren die geschweiften Klammern. Das war ziemlich einfach. Danke – tintincutes

-1

Das ist, weil Ihre Code nicht korrekt ist.

In mehr als 1 Platz!

(die Klammer und das fehlende ‚/3.0‘ Teil)

2

Ändern ) zu } - nur ein Tippfehler, so scheint es.

+0

Danke Noldorin, ich habe es. Ich werde es jetzt ändern ;-) – tintincutes

2

Ihre Formatzeichenfolge ist falsch. Sie haben eine { gepaart mit einer )

+0

Danke Brian ;-) jetzt sehe ich es. – tintincutes

3

Ihr Code ist falsch. Sie haben in Ihrem Zeichenfolgenliteral eine Klammer anstelle einer geschweiften Klammer verwendet. Versuchen Sie folgendes:

static void Main() 
    { 
     Console.WriteLine("Here is 10/3: {0:#.##}", 10); 
    } 
+0

danke Adam, ich habe es. Danke für den Hinweis – tintincutes

1

Es sollte:

Console.WriteLine("Here is 10/3: {0:#.##}", 10); 

Wenn Sie ein Format verwenden Sie es in setzen sollte {und}

+0

Danke Beatles Ich habe es jetzt. Danke für die Hilfe. – tintincutes

+0

Gern geschehen! – Beatles1692

1

Corrected Code unten:

static void Main()  
{  
Console.WriteLine("Here is 10/3: {0:#.##}", 10.0/3);  
} 
+0

danke patjbs Ich habe es :-) Danke für die Hilfe – tintincutes

1

Am Ende der Zeichenfolge haben Sie a) anstelle von a)

+0

Hallo Fredrik danke für die Hilfe, die ich bekam. – tintincutes

0

Lassen Sie mich auch ohne Grund eine identische Antwort an alle anderen senden!

Ersetzen Sie die ##) durch ##} in Ihrem Code.