【发布时间】:2021-09-19 06:00:04
【问题描述】:
所以,我对 C# 感到耳目一新。我决定编写一个简单的计算器程序并给我女儿看。我在我的 main 中添加了一个 while 循环,并添加了一个 if 语句以在用户不想重复该过程时中断循环......我为运算符添加了一些方法并在最后添加了一些信息。之后它停止重复,完全跳过从“x = (char)Console.Read();”获取输入线和退出。有用的建议将不胜感激,我仍然是编码的初学者,所以请不要批评我,谢谢。完整代码如下:
using System;
namespace TrueCalculator
{
class Program
{
public static int addition(int num1, int num2)
{
int result = num1 + num2;
return result;
}
public static int subtraction(int num1, int num2)
{
int result = num1 - num2;
return result;
}
public static int division(int num1, int num2)
{
int result = num1 / num2;
return result;
}
public static int multiplication(int num1, int num2)
{
int result = num1 * num2;
return result;
}
static void Main(string[] args)
{
char x = 'y';
while (x == 'y' || x == 'Y')
{
Console.WriteLine("\t\t\tTrue Calculator\n\t\t Only uses whole numbers!\n\t\t ***BETA VERSION***");
Console.WriteLine("Enter first number: ");
int num1 = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("Enter second number: ");
int num2 = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("Please type desired operator to perform: +, -, /, *");
char op = (char)Console.Read();
if (op == '+')
{
Console.WriteLine(num1 + " + " + num2 + " = " + addition(num1, num2));
}
else if (op == '-')
{
Console.WriteLine(num1 + " - " + num2 + " = " + subtraction(num1, num2));
}
else if (op == '/')
{
Console.WriteLine(num1 + " / " + num2 + " = " + division(num1, num2));
}
else if (op == '*')
{
Console.WriteLine(num1 + " * " + num2 + " = " + multiplication(num1, num2));
}
Console.WriteLine("Reset, y/n?");
x = Convert.ToChar(Console.Read());
if (x == 'n' || x == 'N')
{
break;
}
}
Console.WriteLine("\n\n\t\t\tThank you for using True Calculator\n\nDeveloped by Duster_2015..." +
"\nAny comments or suggestions send to: " +
"FIXME: Enter your Duster email.");
Console.ReadKey();
}
}
}
【问题讨论】:
-
我猜
Console.Read()会离开换行符,而您正在第二次阅读?你可以使用x = Console.ReadLine()[0]; -
读取缓冲区中可能还有一些字符,例如
\n -
我试过 Console.ReadLine()[0];但我得到一个例外“超出范围”。如何检查读取缓冲区?
-
我改变了 x = Convert.ToChar(Console.Read());到 x = (char)Console.Read();只是为了可读性。我仍然没有弄清楚为什么它会完全跳过该行然后自动中断循环并退出。我的意思是我有休息时间;在 if 语句中。
-
它正在退出循环,因为当您键入
y<enter>时,控制台缓冲区中有 3 个字符要读取:y \r \n(在 Windows 上)。所以当你第一次调用Console.Read()你会得到y并且循环重复。下一次它读取从第一次开始一直坐在那里的\r。由于'\r' != 'y'和'\r' != 'Y'循环结束。Console.ReadLine()为你消耗和丢弃\r\n。
标签: c# while-loop repeat