循环时,加上第五,第十,第十五......等数

Oma*_*ani 2 c# iteration while-loop

需要做什么的示例:

需要做什么的例子

"输入了几个数字(输入再次以0结尾).确定并打印第5个,第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();
    }
}
Run Code Online (Sandbox Code Playgroud)

Mon*_*Zhu 8

问题:你counter只增加了if % 5 == 0但它永远不会达到那个值.正如您所看到的,您的起始值是:

int counter = 0;
Run Code Online (Sandbox Code Playgroud)

所以if条件的第二部分将false在第一次迭代和所有后续迭代中进行求值,因为变量永远不会有机会改变.它仍然0在所有迭代中

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

因为你打算计算输入数字,我建议把它放在

number = int.Parse(Console.ReadLine());
Run Code Online (Sandbox Code Playgroud)

作为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;
    }
}
Run Code Online (Sandbox Code Playgroud)

编辑:灵感来自PaulF的评论:

我假设计数器只应在(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!");
    }
}
Run Code Online (Sandbox Code Playgroud)