using System;
class SumDoubles
{
static void Main()
{
//Declare variables
double DblSumTotal = 0;
double LIMIT = 0;
//Ask user to input 5 numbers to be added
Console.Clear();
Console.WriteLine("Enter 5 numbers to be added together.");
do
{
DblSumTotal = DblSumTotal + (Convert.ToDouble(Console.ReadLine()));
LIMIT = LIMIT + 1;
} while (LIMIT < 6);
//Output total
Console.WriteLine("The total sum of the 5 numbers is " + DblSumTotal);
Console.ReadLine();
}
}
这是我到目前为止的代码。它会编译,但在尝试运行时收到错误:
未处理的异常:输入字符串的格式不正确。在System.Dumber.ParseDouble(字符串值,NumberStyles选项,NumberFormat信息numfmt)处于SumDoubles.Main()&#34;的System.Double.Parse(String s,IFormatProvider提供程序);
我对编码很陌生,我似乎无法绕过循环。请帮忙!
答案 0 :(得分:2)
Convert.ToDouble
会抛出您在输入错误时看到的异常,例如一个空字符串。您可能要么使用try catch
块来处理异常,要么可以使用double.TryParse()
,它不会在输入错误时抛出。
double output;
bool isValid = double.TryParse("10", out output); // isValid is true and output contains 10
isValid = double.TryParse("lsdf", out output); // isValid is false
我还注意到此代码中有“off by 1”错误
Console.WriteLine("Enter 5 numbers to be added together.");
do
{
DblSumTotal = DblSumTotal + (Convert.ToDouble(Console.ReadLine()));
LIMIT = LIMIT + 1;
} while (LIMIT < 6);
你的循环有6次迭代(LIMIT = 0,1,2,3,4,5),你期待5个数字。您可能正在按下额外的“输入”,这会导致空字符串""
传递给Convert.ToDouble
,从而导致异常。将while (limit < 6)
更改为while (limit < 5)
。
答案 1 :(得分:1)
你的程序工作得很好,除了它读取六个数字而不是五个。
我认为你的问题与xeraphim所说的有关,你试图同时输入所有数字。
如果输入“4”ENTER“5”ENTER“10”ENTER等等,它会正常工作。 =)
PS:请记住“。”之间存在差异。和“,”。
答案 2 :(得分:0)
Sasse和Tejas Sharma都有一个观点。完整的代码可能看起来像这样:
using System;
class SumDoubles
{
static void Main()
{
//Declare variables
double DblSumTotal = 0;
double LIMIT = 0;
//Ask user to input 5 numbers to be added
Console.Clear();
Console.WriteLine("Enter 5 numbers to be added together.");
do
{
double d;
if (!double.TryParse(Console.ReadLine(), out d)) {
Console.WriteLine("Format error!!!");
} else {
DblSumTotal = DblSumTotal + d;
LIMIT = LIMIT + 1;
}
} while (LIMIT < 5);
//Output total
Console.WriteLine("The total sum of the 5 numbers is " + DblSumTotal);
Console.ReadLine();
}
}
` 另外,如果你像我一样使用非英语语言环境(我有捷克语系统),那么可以解析为double的字符串看起来有点不同(即捷克语&#34; 1,2&#34; vs English& #34; 1.2&#34)
答案 3 :(得分:-2)
我认为这可以通过使用for循环来简化。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication2
{
class Program
{
static void Main(string[] args)
{
int read;
int sum = 0;
Console.WriteLine("Enter 5 numbers: ");
for (int i = 0; i < 5; i++)
{
read = int.Parse(Console.ReadLine());
sum = sum + read;
}
Console.WriteLine("The total sum of the 5 numbers are " + sum);
}
}
}
或者如果您仍然想要使用while循环,那就很容易了。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication2
{
class Program
{
static void Main(string[] args)
{
int read;
int sum = 0;
int i = 0;
Console.WriteLine("Enter 5 numbers: ");
while(i<5)
{
read = int.Parse(Console.ReadLine());
sum = sum + read;
i++;
}
Console.WriteLine("The total sum of the 5 numbers are " + sum);
}
}
}