C# 循环时,求第五、第十、第十五……等数字的和

C# 循环时,求第五、第十、第十五……等数字的和,c#,while-loop,iteration,C#,While Loop,Iteration,需要做什么的示例: “输入多个数字(输入再次以0结束)。确定并打印第五个数字的总和, 10号、15号等。” 有人能告诉我我的代码有什么问题吗 class Program { static void Main(string[] args) { int counter = 0; int sum = 0; Console.Write("Enter a number: "); int number = int.Parse

需要做什么的示例:

“输入多个数字(输入再次以0结束)。确定并打印第五个数字的总和, 10号、15号等。”

有人能告诉我我的代码有什么问题吗

class Program
{
    static void Main(string[] args)
    {
        int counter = 0;
        int sum = 0;

        Console.Write("Enter a number: ");
        int number = int.Parse(Console.ReadLine());

        while (number != 0)
        {
            if (number > 0 && counter % 5 == 0)
            {
                counter++;
                sum = sum + number;
            }
            Console.Write("Enter a number: ");
            number = int.Parse(Console.ReadLine());
        }

        Console.WriteLine("Sum of the 5th, 10th, 15th ... number is = {0}", sum);
        Console.ReadKey();
    }
}

问题:仅当
%5==0
时,才递增
计数器,但它从未达到该值。如您所见,您的起始值为:

int counter = 0;
因此,if条件的第二部分将在第一次迭代和所有后续迭代中计算为
false
,因为变量永远不会有机会更改。在所有迭代中,它保持在
0

解决方案:将递增行放在if子句之外。 通过这种方式,你实际上是在计算输入数字的数量,因此你可以确定它是否是第5、第10、第15

既然你打算计算输入的数字,我建议把

number = int.Parse(Console.ReadLine());
作为while循环中的第一行。然后你可以数一数,然后你应该评估这个数字是不是第5,10,15。。。要素:

while (number != 0)
{
    Console.Write("Enter a number: ");
    number = int.Parse(Console.ReadLine());
    counter++;

    if (number > 0 && counter % 5 == 0)
    {
        sum = sum + number;
    }
}
编辑:受以下评论启发:

我假设计数器只有在(number>0)时才应该递增

为了准确说明您的需求细节,您需要额外添加一个if条款来检查这种情况。但由于
0
是加法中的中性元素,因此它不会对计算的总和产生差异。因此,代码仍应产生预期的结果

编辑2:

如果您的意图也是不允许使用负数,那么您应该将If子句一分为二,并且仅当输入的数字高于
0
时才增加计数器。之后,您可以检查当前元素是否是要添加到总和的候选元素:

while (number != 0)
{
    Console.Write("Enter a number: ");
    number = int.Parse(Console.ReadLine());

    if (number > 0 )
    {
        counter++;
        if (counter % 5 == 0)
        {
            sum = sum + number;
        }
    }
    else
    {
        Console.Write("Please no negative numbers!");
    }
}

在执行if语句之前,必须先递增计数器

Counter++
If (counter % 5 == 0) { 
...

获取数字应该在while循环中too@AshkanMobayenKhiabani正在进行中loop@MongZhu:根据原始代码,我假设计数器只有在(数字>0)时才应递增。@PaulF听起来正确,但由于
0
是加法中的中性元素,因此它不会对计算的总和产生差异。但你的评论是正确的。我将把这个纳入我的计划answer@MongZhu:但输入任何负数都是有效的输入,这将影响与原始代码相比的结果。我会将if子句一分为二,每五个数字的检查嵌套在阳性检查中。欢迎使用StackOverflow。这是一个很好的第一个答案。提示:你可以写
sum+=number而不是
sum=sum+number:)好吧,怎么了?你得到了什么?你只展示你所期望的,而不是你所得到的。如果你对LINQ感到满意,你可能会感兴趣。