编写一个控制台应用程序,用于计算给定整数的总和。 每行输入一个数字,应用程序将逐个读取,直到用户写入字符而不是数字。当用户输入x时,应用程序知道字符串中的所有数字都已输入并显示其数量。
如果用户输入的第一件事是x字符,则应用程序将返回0。
示例:
输入:
2
5
-3
1
X
控制台将显示:
5
这是我的代码
string[] answer = new string[10];
int sum = 0
for (int i = 0; i < answer.Length; i++)
{
sum += Int32.Parse(answer[i]);
if (answer[i] == "x")
{
Console.WriteLine(sum);
}
answer[i] = Console.ReadLine();
}
Console.Read();
谁能告诉我为什么不工作?
答案 0 :(得分:2)
首先,工作代码(我并没有专注于X,而是关注任何不是数字的字符):
int n;
int sum = 0;
while (int.TryParse(Console.ReadLine(), out n))
{
sum += n;
}
Console.Write(sum );
Console.ReadKey();
其次,您的代码无法正常工作,因为当您尝试解析其第一个单元格的内容时,您的数组已经满了&#39; null&#39; -s;回答[i]& #39;
这是对您的代码的一个愚蠢(一点点)修复:
string[] answer = new string[10];
//HERE
for (int i = 0; i < answer.Length; i++)
{
answer[i] = "0";
}
int sum = 0;
for (int i = 0; i < answer.Length; i++)
{
sum += Int32.Parse(answer[i]);
if (answer[i] == "x")
{
Console.WriteLine(sum);
}
answer[i] = Console.ReadLine();
}
Console.Read();
您的代码的另一个问题是您不能停止迭代一次&#34; x&#34;输入,但一直持续到阵列结束(直到它已经10次)。
以下是对您的代码的完整修复:
string[] answer = new string[10];
for (int i = 0; i < answer.Length; i++)
{
answer[i] = "0";
}
int sum = 0;
for (int i = 0; i < answer.Length; i++)
{
answer[i] = Console.ReadLine();
if (answer[i] == "x")
{
break;
}
sum += Int32.Parse(answer[i]);
}
Console.WriteLine(sum);
Console.Read();
答案 1 :(得分:1)
几个问题:
int sum = 0
最后缺少;
。TryParse
代替Parse
请尝试以下代码:
string[] answer = new string[10];
int sum = 0, number;
for (int i = 0; i < answer.Length; i++)
{
answer[i] = Console.ReadLine();
if (answer[i] == "x")
{
Console.WriteLine(sum);
break;
}
if(Int32.TryParse(answer[i], out number))
sum += number;
}
答案 2 :(得分:0)
我告诉你终止&#39; x&#39;
var answer = Console.ReadLine();
var sum = 0;
while (answer != "x")
{
if (Int32.TryParse(answer, out var value))
{
sum += value;
}
answer = Console.ReadLine();
}
Console.WriteLine(sum);
答案 3 :(得分:0)
您应首先检查"x"
,因为int.Parse("x")
会抛出异常:
订单错误(当前代码):
sum += Int32.Parse(answer[i]); // <- this will throw exception on "x" input
if (answer[i] == "x") {
...
}
...
正确的顺序:
if (answer[i] == "x") {
...
}
else
sum += Int32.Parse(answer[i]);
...
为了检查语法错误(例如,当用户输入"bla-bla-bla"
时)我建议int.TryParse
而不是int.Parse
并让我们摆脱数组我们为什么要收集这些项目(特别是。对10
项目进行不必要的限制?
// long: we don't want overflow, e.g. 2000000000, 1000000000
long sum = 0;
while (true) {
// Trim() - let's be nice and allow user put leading/trailing spaces
string input = Console.ReadLine().Trim();
if (string.Equals("x", input, StringComparison.OrdinalIgnoreCase))
break;
if (int.TryParse(input, out var item))
sum += item;
else {
//TODO: Incorrect input, neither integer nor "x" (e.g. "abracadabra")
}
}
Console.WriteLine(sum);
Console.Read();