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)
问题:你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)