繁体   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