我正在尝试使用C#片段中的用户输入实现欧几里德算法,作为我学习该语言过程的一部分。 MVS告诉我if和elif语句以及这些语句的结束括号都有错误。现在,来自pythonic背景这对我来说似乎很自然,所以请帮助我找出可能的错误。非常感谢帮助。
代码:
namespace EuclideanAlgorithm
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Enter two numbers to calculate their GCD");
int input1 = Convert.ToInt32(Console.ReadLine());
int input2 = Convert.ToInt32(Console.ReadLine());
int remainder;
int a;
int b;
if (input1 == input2);
{
Console.Write("The GCD of", input1, "and", input2, "is", input1);
Console.ReadLine();
}
else if (input1 > input2);
{
a = input1;
b = input2;
while (remainder != 0);
{
remainder = a % b;
a = b;
b = remainder;
}
Console.Write("The GCD of", input1, "and", input2, "is", b);
Console.ReadLine();
}
else if (input1 < input2);
{
a = input2;
b = input1;
while (remainder != 0);
{
remainder = a % b;
a = b;
b = remainder;
}
Console.WriteLine("The GCD of", input1, "and", input2, "is", b);
Console.ReadLine();
}
}
}
}
答案 0 :(得分:7)
你需要删除if
上的分号。
所以:
if (input1 == input2);
变为:
if (input1 == input2)
这也适用于else if
和while
。
也只是旁注:
Console.Write("The GCD of", input1, "and", input2, "is", input1);
这将产生:
的GCD
如果你想做string.Format
,你需要这样做:
Console.Write("The GCD of {0} and {1} is {2}", input1, input2, input1);
Here是关于string.Format
还有一件事 - 确保在设置它时初始化剩余部分,否则你将无法编译在访问之前,可能无法初始化局部变量余数:
int remainder = 0;
我希望这会有所帮助。
修改强>
如果你希望你的余数在第一次评估时不是0,你可以使用do / while循环:
do
{
remainder = a % b;
a = b;
b = remainder;
} while (remainder != 0);
答案 1 :(得分:0)
你在那些if语句
上有半冒号 if (input1 == input2);
else if (input1 < input2);
当有半冒号时,它不会进入括号,将它们更改为
if (input1 == input2)
else if (input1 < input2)
由于您已经拥有{
,我们无需再次添加它们,
现在它应该工作
同样适合您在顶部的while循环,我刚刚看到
答案 2 :(得分:0)
以下行错误:
if (input1 == input2);
[...]
else if (input1 > input2);
[...]
while (remainder != 0);
[...]
else if (input1 < input2);
[...]
while (remainder != 0);
每个末尾的分号(;
)结束语句,使得大括号({
)不正确。
以分号结束不结束if
,while
和for
语句。