-1

ここに 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);
    }
}
4

2 に答える 2

1

問題は Console.Read();、 23 end enter キーRead()を入力すると、最初の入力文字のキー値が返されることです2。の ASCII 文字値2は 50 です

numberOfRecords++したがって、結果として51を取得します

に変更 Console.Read();Console.ReadLine();て削除numberOfRecords++

于 2013-04-24T10:34:25.287 に答える
1

この行が問題です:

        int numberOfRecords = Convert.ToInt32(Console.Read());

値を返していASCIIます。

次のように変更します。

        int numberOfRecords;
        Int32.TryParse(Console.ReadLine(), out numberOfRecords);

そして取り除くnumberOfRecords++

何が起こっているかの説明:

取得している理由は、レコード数51を入力するとに設定され、変数を経由してインクリメントするためです。235051numberOfRecords++

于 2013-04-24T10:30:06.773 に答える