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