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