如何编写一个控制台应用程序来计算给定整数的总和

时间:2017-12-21 08:33:21

标签: c#

编写一个控制台应用程序,用于计算给定整数的总和。 每行输入一个数字,应用程序将逐个读取,直到用户写入字符而不是数字。当用户输入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();

谁能告诉我为什么不工作?

4 个答案:

答案 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)

几个问题:

  1. 我认为您的代码说明顺序不正确。第一次解析数组元素时,它尚未初始化。
  2. int sum = 0最后缺少;
  3. 您应始终使用TryParse代替Parse
  4. 请尝试以下代码:

    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();