4 回答
TA贡献1951条经验 获得超3个赞
您可以将程序视为从上到下逐行执行,并且仅在到达 while 循环结束时向上移动。while 循环的末尾是与循环开始时匹配的。}{
知道了这一点,你就会明白为什么它总是说总和为零。从您的代码:
int sum = 0;
Console.WriteLine("Sum of values: " + sum);
由于程序执行“从上到下逐行”,因此它将首先设置为 0,然后打印出总和。所以它会一直打印.如果您希望它在计算完总和后打印出总和,则需要将总和的下移到计算总和的位置下方。sum"Sum of values: 0"WriteLine
同样的问题也适用于 : 打印此语句的行出现在 之后,因此只有在 0 到 101 之间时才会执行。由于您尝试捕获不在 0 和 101 之间的场景,因此您需要将语句移动到循环上方。"Invalid input. Try again."while (0 < s && s < 101)sswhile
因此,要解决眼前的问题,只需做两件事:
1)移动两条线
Console.WriteLine("Sum of values: " + sum);
Console.ReadKey();
到 while 循环之后(紧跟在 which 之后,与 的缩进级别相同)。}while
2)移动三条线
if (s < 0 && 101 < s)
{
Console.WriteLine("Invalid input. Try again.");
}
直到正下方,然后仔细检查逻辑。如果小于零或大于 101,则听起来要打印语句。int s = Convert.ToInt32(Console.ReadLine());ss
TA贡献1788条经验 获得超4个赞
如果需要循环,则应遵循 Heath Raftery 说明
否则你可以写这样的东西:
static void Main(string[] args)
{
Console.WriteLine("Enter a beginning value between 1 and 100");
int s = Convert.ToInt32(Console.ReadLine());
if (s < 0 || s > 100)
Console.WriteLine("Invalid input. Try again.");
else
Console.WriteLine($"Sum of values: {Enumerable.Range(1,s).Sum()}");
}
或者正如 Haldo 所说,您可以使用 的公式并将最后一个 WriteLine 替换为:N * (N+1) / 2
Console.WriteLine($"Sum of values: {s * (s+1) / 2}")
TA贡献2016条经验 获得超9个赞
这是一个有效的算法......
Console.WriteLine("Enter a value between 1 and 100");
var input = int.Parse(Console.ReadLine());
int sum = 0;
if (input<1 || input>100) {
Console.WriteLine("Sorry, Try again");
}
else{
while(input > 2){
input-=1;
sum+=input;
}
}
Console.WriteLine("Sum of values: " + sum);
TA贡献1844条经验 获得超8个赞
试试这个:
static void Main(string[] args)
{
while (true)
{
Console.Write("Enter a number between 1 and 100: ");
int Number = Convert.ToInt32(Console.ReadLine());
if (Number < 0 || Number > 100)
Console.WriteLine("Sorry. Try again.");
else
{
int sum = 0;
for (int i = 1; i <= Number; i++)
{
sum = sum + i;
}
Console.WriteLine("Sum of values: " + sum);
}
}
}
- 4 回答
- 0 关注
- 128 浏览
添加回答
举报