class Program
{
static void Main(string[] args)
{
string choice = string.Empty;
do
{
start:
int output = 0;
int number = 0;
Console.WriteLine("Please input a number for it to be counted!");
bool conversion = int.TryParse(Console.ReadLine(), out output);
if (number < 1000)
{
switch (conversion)
{
case true:
while (number <= output)
{
Console.Write(number + " ");
number += 2;
}
break;
case false:
Console.WriteLine("ERROR: INVALID INPUT!");
goto start;
}
}
else
{
Console.WriteLine("APPLICATION ERROR: NUMBER MUST BE BELOW OR AT 1000 TO PREVENT OVERFLOW!");
return;
}
do // Here is the beginning of the do code
{
Console.WriteLine("\n Do you want to continue - Yes or No");
choice = Console.ReadLine();
if (choice.ToUpper() != "YES" && choice.ToUpper() != "NO")
{
Console.WriteLine("ERROR INVALID INPUT: Only input Yes or No!");
}
} while (choice.ToUpper() != "YES" && choice.ToUpper() != "NO");
} while (choice.ToUpper() == "YES");
}
}
我在这个陈述中使用了几个do while循环,但是我试着如何放入循环&#34; ERROR INVALID INPUT:&#34;当用户输入除指定整数的限制之外的任何内容(即输入小数或分数)或者如果它们放入字符串时的结果。我只是使用了goto,因为我无法找到do while循环语句的位置。如果有人可以简单地告诉我如何用do while循环替换那个goto,那么我会非常感激。 (请注意,如果你向我展示了我可以更好地优化代码的方法,因为我还是新手,我可能不会理解它,但欢迎你给它最好的镜头!)
答案 0 :(得分:1)
简答:
关键字continue
表示返回循环的开头。请注意,这将重新检查循环条件,如果为false则会中断。此外,大多数人发现do-while循环不太可读(并且它们确实很少需要),因此请尝试使用while循环。
还有关键字break
,它只会退出循环。 (不只是用于开关盒!)
更具可读性的版本如下所示:
string userAnswer = "yes";
// while is usually more readable than do-while
while (userAnswer == "yes")
{
Console.WriteLine("Please input a number for it to be counted!");
int number;
// Ask for new input until the user inputs a valid number
while (!int.TryParse(Console.ReadLine(), out number))
{
Console.WriteLine("Invalid number, try again");
}
if (number < 1000)
{
// Print from 0 to number, jumping in 2's
for (int i = 0; i <= number; i += 2)
Console.WriteLine(i + " ");
}
else
{
Console.WriteLine("APPLICATION ERROR: NUMBER MUST BE BELOW OR AT 1000 TO PREVENT OVERFLOW!");
continue; // Jump back to the start of this loop
}
Console.WriteLine("Continue? (Yes / No)");
userAnswer = Console.ReadLine().ToLower();
// Ask for new input until the user inputs "Yes" or "No"
while (userAnswer != "yes" && userAnswer != "no")
{
Console.WriteLine("Invalid input. Continue? (Yes / No)");
userAnswer = Console.ReadLine().ToLower();
}
}
答案 1 :(得分:0)
嘿,我会发布一些可能有用并提供一些建议的代码。基本上声明一个名为&#39; loopCompleted&#39;这将继续执行do while循环,直到您将其设置为true。缺点是它不会像return / goto / etc那样立即退出循环,但在大多数情况下这不是问题。
你可能想要使用if / else而不是switch(转换),它看起来有点有趣,但有点超过顶部:)
如果Int.TryParse()没有为小数值返回false(例如[15.08]则返回[true]和[15])。然后你可以在使用TryParse之前存储Console.ReadLine(),然后使用stringName.Contains()来检查&#39;。&#39;基本上,如果转换成功,您还要检查它是否包含小数点。
另一种检查方法是执行float.TryParse()然后检查它是否是小数值。
bool fraction = false;
if( number % 1.0f > 0)
fraction == true;
%称为模数,它返回A / B的余数 如果数字除以1时有余数,则必须是小数值。
//start:
bool loopCompleted = false;
do
{
int output = 0;
int number = 0;
Console.WriteLine("Please input a number for it to be counted!");
bool conversion = int.TryParse(Console.ReadLine(), out output);
if (conversion && number < 1000)
{
while (number <= output)
{
Console.Write(number + " ");
number += 2;
}
loopCompleted = true;
}
else
{
if(conversion == false)
{
Console.WriteLine("ERROR: INVALID INPUT!");
}
else
{
Console.WriteLine("APPLICATION ERROR: NUMBER MUST BE BELOW OR AT 1000 TO PREVENT OVERFLOW!");
}
}
} while(!loopCompleted)