簡體   English   中英

C#控制台-Console.ReadLine返回錯誤的輸出

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM