2016-05-20 8 views
0

Wir lernen derzeit über Funktionen, Parameter, Argumente in einer Klasse, also möchte ich das gleiche Format beibehalten, da 'Dezimal-Preis' und 'Dezimal-Betrag' sein wird in eine Funktionsdefinition eingegebenFehler: CS1503 Argument 1 und Fehler: CS0019 '=='

Ich habe verschiedene Möglichkeiten ausprobiert, die 'Dezimal' in eine 'Zeichenkette' umzuwandeln, um zu verhindern, dass der Benutzer Zeichen statt einer Dezimalzahl eingibt, aber ich weiß nicht, warum es nicht ' t Arbeits

da ‚Menge‘ ist ein decimal, muss es in eine string umgewandelt werden zu können, (amount == string.Empty) laufen, aber als das erste Problem, das ich kann es nicht herausgefunden.

 decimal price; 
     decimal amount; 



     Console.Write("What is the price?"); 
     price = decimal.Parse(Console.ReadLine()); 


     double pricenumber; 

     while (!double.TryParse(price, out pricenumber)) //error here 
     { 
      Console.WriteLine("You've not entered a price.\r\nPlease enter a price"); 
      price = decimal.Parse(Console.ReadLine()); 

     } 

     Console.Write("How many were you planning on purchasing?"); 

     amount = decimal.Parse(Console.ReadLine()); 

     while (amount == string.Empty) //error here 
     { 
      Console.WriteLine("You cannot leave this blank.\r\nPlease enter how many are needed:"); 
      amount = decimal.Parse(Console.ReadLine()); 
     } 
+0

Möglicherweise möchten Sie lesen auf https://www.bing.com/search?q= c% 23 + numerisch + typ + konvertierung ... –

Antwort

0

Versuchen Sie folgendes:

string price; 
     string amount; 



     Console.Write("What is the price?"); 
     price = Console.ReadLine(); 


     double pricenumber; 

     while (!double.TryParse(price, out pricenumber)) 
     { 
      Console.WriteLine("You've not entered a price.\r\nPlease enter a price"); 
      price = Console.ReadLine(); 

     } 

     Console.Write("How many were you planning on purchasing?"); 

     double amountnumber; 
     amount = Console.ReadLine(); 

     while (!double.TryParse(amount, out amountnumber)) 
     { 
      Console.WriteLine("You cannot leave this blank.\r\nPlease enter how many are needed:"); 
      amount = Console.ReadLine(); 
     } 
2

Es gibt einige logische Fehler im Code, die Sie beheben müssen. Bitte beachten Sie die Kommentare:

Console.Write("What is the price?"); 
price = decimal.Parse(Console.ReadLine()); // you're already parsing the user-input into 
// a decimal. This is somewhat problematic, because if the user enters "foo" instead 
// of "123" the attempt to parse the input will fail 

double pricenumber; 
while (!double.TryParse(price, out pricenumber)) // the variable "price" already contains 
// a parsed decimal. That's what you did some lines above. "TryParse" expects a string to 
// be parsed whereas you're committing the parsed decimal 
{ 
    Console.WriteLine("You've not entered a price.\r\nPlease enter a price"); 
    price = decimal.Parse(Console.ReadLine()); 
} 

Also, was sollten Sie stattdessen tun ist, um die Benutzereingabe als String zu halten, bis du bist dann zu analysieren versucht es:

Console.Write("What is the price?"); 
string input = Console.ReadLine(); // keep as string 

double pricenumber; 
while (!decimal.TryParse(input, out pricenumber)) 
{ 
    Console.WriteLine("You've not entered a price.\r\nPlease enter a price"); 
    input = Console.ReadLine(); 
} 

Das gleiche gilt für deinen anderen Versuch. Auch hier schauen Sie sich bitte die Kommentare unter:

Console.Write("How many were you planning on purchasing?"); 
input = Console.ReadLine(); // again, keep as string 

while (!decimal.TryParse(input, out amount)) 
{ 
    Console.WriteLine("You cannot leave this blank.\r\nPlease enter how many are needed:"); 
    input = Console.ReadLine(); 
} 
in ein

Wenn es Raum Sie diese Logik setzen könnte und sollte für die weitere Optimierung:

Console.Write("How many were you planning on purchasing?"); 
amount = decimal.Parse(Console.ReadLine()); // you're already parsing the string into a 
// decimal 

while (amount == string.Empty) // as you can't compare a decimal with a string, this 
// creates an error 
{ 
    Console.WriteLine("You cannot leave this blank.\r\nPlease enter how many are needed:"); 
    amount = decimal.Parse(Console.ReadLine()); 
} 

Sie es auf die gleiche Weise wie oben lösen konnte separate Methode, da der Code nahezu identisch ist und zu Duplikaten führen würde.

private static decimal GetParsedInput(string question, string noticeOnFailed) 
{ 
    Console.Write(question); 
    input = Console.ReadLine(); 

    decimal result; 
    while (!decimal.TryParse(input, out result)) 
    { 
     Console.WriteLine(questionOnFailed); 
     input = Console.ReadLine(); 
    } 

    return result; 
} 

Verbrauch:

decimal price = GetParsedInput(
    "What is the price?", 
    "You've not entered a price.\r\nPlease enter a price:"); 
decimal amount = GetParsedInput(
    "How many were you planning on purchasing?", 
    "You cannot leave this blank.\r\nPlease enter how many are needed:"); 
0

I figured it out

I've done this instead

{ public static decimal questions(string question) 
    { 
     Console.Write(question); 
     string answer = Console.ReadLine(); 

     decimal result; 
     while (!decimal.TryParse(answer, out result)) 
     { 
      Console.WriteLine(question); 
      answer = Console.ReadLine(); 
     } 
     return result; 
} 

Usage:

string productcost = "How much does one " + productname + " cost? "; 
questions(productcost); 

worked perfectly