Если вам не нужно выполнять регулярные выражения, может сработать что-то вроде этого:
var values = input.Split(' ');
int value;
if (values.Length == 2 && values.All(v => int.TryParse(v, out value))
{
//do stuff
}
Полное решение может выглядеть так:
string input = "";
bool success = false;
while (!success)
{
Console.Write("Please input the two numbers you wish to use seperated by a space: ");
input = Console.ReadLine();
var values = input.Split(' ', StringSplitOptions.RemoveEmptyEntries);
if (values.Length != 2 || !values.All(v => int.TryParse(v, out int value))
{
Console.WriteLine($"You entered \"{input}\" You did not enter two numbers separated by a space, please try again.");
}
else
{
success = true;
}
}
ИМХО, в do..while
нет ничего плохого, но, поскольку вы уже используете переменную цикла, я думаю, что просто while
лучше сообщает с самого начала, что вы входите в цикл, который зависит от успеха процесс под ним.