[英]C# Console - Console.ReadLine returns wrong output
我這里有一個C#控制台應用程序,當我允許用戶輸入一定數量的記錄時,該程序將生成一個報價單號。 這是在我在程序中實現之前測試我制定的算法的方法。
例如,當我輸入23(假設這是數據庫中的當前記錄計數)時,程序將輸出“ CQ-13-04-0023”。 但是我得到了“ CQ-13-04-0051”的輸出。 我的目標是當給定引用號中的序列號達到9999時,當數據庫中的記錄數達到10000及以上時,它將重置為0001。
這是我的代碼:
class Program
{
static void Main(string[] args)
{
string QuoteRefNum = "";
string seriesCount = "";
DateTime year = DateTime.Now;
string strYear = year.ToString("yy");
string strMonth = year.ToString("MM");
Console.Write("Input the number of records: ");
int numberOfRecords = Convert.ToInt32(Console.Read());
numberOfRecords++;
if (numberOfRecords == 0)
{
seriesCount = "000" + numberOfRecords++;
}
else if (numberOfRecords >= 1 && numberOfRecords <= 9)
{
seriesCount = "000" + numberOfRecords;
}
else if (numberOfRecords >= 10 && numberOfRecords <= 99)
{
seriesCount = "00" + numberOfRecords;
}
else if (numberOfRecords >= 100 && numberOfRecords <= 999)
{
seriesCount = "0" + numberOfRecords;
}
else if (numberOfRecords >= 1000 && numberOfRecords <= 9999)
{
seriesCount = numberOfRecords.ToString();
}
else if (numberOfRecords >= 10000 && numberOfRecords <= 99999)
{
string newSetOfRecords = numberOfRecords.ToString();
int tempNumber = 0;
newSetOfRecords.Remove(0, 1);
tempNumber = Convert.ToInt32(newSetOfRecords);
if (tempNumber == 0)
{
seriesCount = "000" + tempNumber++;
}
else if (tempNumber >= 1 && tempNumber <= 9)
{
seriesCount = "000" + tempNumber;
}
else if (tempNumber >= 10 && tempNumber <= 99)
{
seriesCount = "00" + tempNumber;
}
else if (tempNumber >= 100 && tempNumber <= 999)
{
seriesCount = "0" + tempNumber;
}
else if (tempNumber >= 1000 && tempNumber <= 9999)
{
seriesCount = tempNumber.ToString();
}
}
QuoteRefNum = "CQ" + strYear + "-" + strMonth + "-" + seriesCount;
Console.WriteLine("The quote reference number is: " + QuoteRefNum);
}
}
這行是問題所在:
int numberOfRecords = Convert.ToInt32(Console.Read());
它正在返回ASCII
值。
更改為:
int numberOfRecords;
Int32.TryParse(Console.ReadLine(), out numberOfRecords);
並刪除numberOfRecords++
發生了什么的解釋:
之所以得到51
是因為當您輸入23
條記錄時,將其設置為50
,然后通過numberOfRecords++
將變量增加為51
問題是Console.Read();
當您鍵入23 end時,輸入鍵Read()
將返回第一個輸入字符2
鍵值。 ASCII字符值2
是50
因此,在numberOfRecords++
之后,您將得到51
更改Console.Read();
到Console.ReadLine();
並刪除numberOfRecords++
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.