2009-05-26 7 views
1

Je suis un exemple du livre: The Complete Reference C# 3.0 par Herbert Schildt. Il s'agit d'écrire dans Console.WriteLine avec des arguments. Voici l'exemple: J'ai essayé, mais je recevais une erreur:argument erreur 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

Je ne sais pas si le livre a une erreur ou est-ce mon code? J'apprécierais votre aide. Merci

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 ceci est mon code ressemble à:

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

Répondre

9

Vous utilisez la mauvaise accolade de fin pour le paramètre de format. Notez la parenthèse de fin) après #. ##, il devrait être un} à la place (accolades).

Notez également que vous avez quitté la division, et si vous changez simplement votre code à ce (corrigé l'accolade ainsi):

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

Ensuite, vous allez avoir une autre question aussi bien, puisque le résultat de ce sera:

Here is 10/3: 3.00 

la raison est que 10/3 est division entière, voir combien de fois 3 va complètement en 10, ce qui est 3 fois. Si vous voulez une division en virgule flottante, divisez 10 par 3 pour obtenir 3 et 1/3, alors vous devez vous assurer qu'au moins un des nombres est en virgule flottante, donc 10.0/3 fera l'affaire.

+0

Salut Lasse V. Karlsen, merci, je l'ai maintenant. oui c'était les accolades. C'était assez simple. Merci – tintincutes

-1

C'est parce que votre code est incorrect.

En plus de 1 place!

(l'accolade et les disparus « /3.0 » partie)

2

Remplacez ) par } - juste une faute de frappe, semble-t-il.

+0

Merci Noldorin, j'ai compris. Je vais le changer maintenant ;-) – tintincutes

2

Votre chaîne de format est erronée. Vous avez un { associé à un )

+0

Merci Brian ;-) maintenant je le vois. – tintincutes

3

Votre code est erroné. Vous avez utilisé une parenthèse à la place d'une accolade dans votre littéral de chaîne. Essayez ceci:

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

merci Adam, je l'ai eu. Merci pour le conseil – tintincutes

1

Il devrait être:

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

Lorsque vous utilisez un format que vous devriez le mettre dans {et}

+0

Merci Beatles Je l'ai maintenant. Merci pour l'aide. – tintincutes

+0

De rien! – Beatles1692

1

code corrigé ci-dessous:

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

merci patjbs Je l'ai eu :-) merci pour l'aide – tintincutes

1

à la fin de votre chaîne, vous avez a) au lieu de a}

+0

Salut Fredrik merci pour l'aide que j'ai eu. – tintincutes

0

Permettez-moi également de poster une réponse identique à tout le monde sans aucune raison!

Remplacez ##) par ##} dans votre code.