簡體   English   中英

C#計算器用戶輸入問題

[英]C# calculator user input issue

我正在嘗試為一個類創建一個 C# 計算器,但是當我嘗試使用它時,它總是返回明顯錯誤的答案,例如 1+3 = 100,或者將小數點 2.33 向下舍入到 50。它也會在每次第一次輸入后崩潰時間,這讓我認為它在我出於某種原因按下 Enter 鍵時正在閱讀,但我已經查看並找不到關於任何此類問題的文檔。 提前致謝。

'

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace calculator
{
    class Program
    {
        static void Main(string[] args)
        {
            //set label for finished functions to return to
            start:
            System.Console.WriteLine("choose from one of the following calculator choices");
            System.Console.WriteLine("1: whole number");
            System.Console.WriteLine("2: addition");
            System.Console.WriteLine("3: sine");
            System.Console.WriteLine("4: cosine");
            System.Console.WriteLine("5: absolue value");
            System.Console.WriteLine("6: quit");
            int optionSelect = Convert.ToInt32(Console.ReadLine());
            
            switch (optionSelect)
            {
                
                case 1:
                    System.Console.WriteLine("whole number");
                    System.Console.WriteLine("give a decimal");
                    decimal temp = System.Console.Read();
                    System.Console.WriteLine(Convert.ToInt32(temp));
                    goto start;
                case 2:
                    System.Console.WriteLine("addition");
                    System.Console.WriteLine("first int");
                    int add1 = Convert.ToInt32(System.Console.ReadKey());
                    System.Console.WriteLine("second int");
                    Console.ReadLine();
                    int add2 = Convert.ToInt32(System.Console.Read());
                    Console.ReadLine();
                    int answer = add1+add2;
                    System.Console.WriteLine("the answer is " + answer);
                    goto start;
                case 3:
                    System.Console.WriteLine("sine");
                    System.Console.WriteLine("enter your angle in radians");
                    double numSin = Console.Read();
                    System.Console.WriteLine(Math.Sin(numSin));
                    goto start;
                case 4:
                    System.Console.WriteLine("cosine");
                    System.Console.WriteLine("enter your angle in radians");
                    double numCos = Console.Read();
                    System.Console.WriteLine(Math.Cos(numCos));
                    goto start;
                case 5:
                    System.Console.WriteLine("absolute value");
                    System.Console.WriteLine("enter a number");
                    double num = Convert.ToDouble(Console.Read());
                    System.Console.WriteLine(Math.Abs(num));
                    goto start;
                case 6:
                    System.Console.WriteLine("shutting down...");
                    goto start;
                default:
                    System.Console.WriteLine("invalid input");
                    goto start;

            }
            
            
            
        }
    }
}
`

因此,您的代碼中存在多個問題。

Console.Read將返回您輸入的第一個字符的相應 ASCII 代碼。 這是 ASCII 表的鏈接: http : //www.asciitable.com/

因此,如果您在控制台中輸入 0 實際上不是 0,而是 ASCII 表中 0 的對應值。 0=48, 1=49, 2=50 ... 9 = 50。

如果您輸入多個字符,則只有第一個字符會被Console.Read處理。

要解決您的問題,您可以像在乞討中一樣使用:

string line = Console.ReadLine();

之后,您可以將該行轉換為您需要的任何內容,例如decimal x = Convert.ToDecimal(line) int x = Convert.ToInt32(line)

另外請嘗試將goto邏輯更改為while

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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