我剛剛開始學習C#這一週,並試圖運行一個簡單的代碼,提示用戶輸入一個數字,如果他們輸入文本,或提示他們輸入一個正數,如果他們輸入一個負數(對文本是一個布爾操作,對於負數是一個if語句)。如果他們輸入一個有效(正數)的數字,程序會繼續執行其餘的步驟。儘管while循環移動到下一步沒有滿足條件
但是,通過這段代碼,如果用戶輸入一個負數,然後是一個文本,然後是另一個負數等,它似乎打破了循環,並繼續下一步操作。
該代碼是一個更大程序的一部分,所以我縮小了它的範圍,並且只提取了它運行的最關鍵部分。有人能夠發現我在這裏錯過的東西嗎?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace IncomeTaxCalculator
{
class IncomeTax
{
public static void Main()
{
double income;
income = income_input();
show_output(income);
}
public static double income_input()
{
double income; string income_string; bool bad_value = true;
do
{
Console.Write("What is your total income: ");
income_string = Console.ReadLine();
if (double.TryParse(income_string, out income))
{
bad_value = false;
}
else
{
Console.WriteLine("Enter your income as a whole-dollar numeric figure.");
}
if (income < 0)
{
Console.WriteLine("Your income cannot be a negative");
}
} while (bad_value || income < 0);
return income;
}
public static void show_output(double income)
{
Console.WriteLine("Your income is " + income);
Console.WriteLine("\n\n Hit Enter to exit.");
Console.ReadLine();
}
}
}
我已經可以告訴你,你在標題中所做的假設是錯誤的。也許調試它看到的值:) – EpicKip
在C#中命名方法的標準是'PascalCase'('IncomeInput'而不是'income_input'),對於局部變量則是'camelCase'('incomeString'而不是'income_string') –
您需要在循環的開始處將'bad_value'重新初始化爲true。 – juharr