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 關注
- 286 瀏覽
添加回答
舉報