Проблемы из программой (язык C#)
Несколько дней назад начал учить язык, потому не надо принимать умных слов, которых я не пойму Хотел проверить свои знания программирования на этой программе:
Random rand = new Random();
int free;
free = rand.Next(1, 20);
string Cup = "Да";
string Cap = "Нет";
string Cyp = "Повторил";
Console.WriteLine("Количество прожетых тобой лет: " + free);
string paradox = Console.ReadLine();
if (paradox == Cup)
Console.WriteLine("Я угадал");
else
if (paradox == Cap)
Console.WriteLine("Блин значит тебе " + free, " лет");
else
if (paradox == Cyp)
Console.WriteLine("Ой сорри, тебе " + free);
Console.ReadKey();
Бывает повторяет числа, как этого избежать? А то больно часто бывают моменты показанные в скриншоте:

Программа задаёт второй вопрос, как сделать так что-бы я мог ответить именно на второй вопрос
Ответы (2 шт):
Так как сейчас сложно понять, чего вы хотите получить.
Вместо прямого ответа на ваши вопросы, вот пример из классических обучающих задач по программированию (я его только что для вас написал): программа загадывает число от 0 до 100, пользователь пробует отгадать, получается своеобразная миниигра.
Изучите и потестируйте пример. Скорее всего он содержит ответы на все ваши вопросы.
Random rndGenerator = new Random(DateTime.Now.Millisecond);
int number = rndGenerator.Next(0, 100);
bool repeat = true;
int count = 0;
Console.WriteLine("Загадано число от 0 до 100, попробуй угадать!");
Console.WriteLine("(Для выхода просто нажми Enter)");
while (repeat)
{
Console.Write("Введи число: ");
string input = Console.ReadLine();
if (input.Length > 0)
{
if (int.TryParse(input, out int tryNumber))
{
count++;
if (number > tryNumber)
Console.WriteLine("Больше");
else
if (number < tryNumber)
Console.WriteLine("Меньше");
else
if (number == tryNumber)
{
Console.WriteLine("Угадал! Это число " + number + ".");
Console.WriteLine("Количество попыток: " + count);
repeat = false;
}
}
else
Console.WriteLine("Это не число, попробуй еще раз.");
}
else
{
Console.WriteLine("Сдаешься? Ну ладно.");
repeat = false;
}
}
Console.WriteLine("Пока!");
Console.ReadKey();
boolэто либоtrue, либоfalse, значения истина или ложь используется для выражений сравнения, то есть логических выражений. Результат любого логического выражения можно записать в переменную типаbool.DateTime.Now.Millisecondэто текущее значение миллисекунд на часах компьютера.whileэто цикл, который будет повторяться пока выражение в скобках имеет значениеtrue.int.TryParse(input, out int tryNumber)- это функция, которая возвращаетbool, при преобразовании строки в число. И если преобразовать в число удалось - будетtrue, иначеfalse.input- входная строка,out int tryNumber- результат преобразования. Все это для того, что вы не можете напрямую сравнивать строку с числом и наоборот.
sealed class App
{
[ThreadStatic]
static readonly Random rand = new Random(); // @yolosora написал к комментариях по поводу сида
static readonly Dictionary<string, string> answerFormats = new Dictionary<string, string>(3)
{
[@"Да"] = "Я угадал: тебе {0} лет",
[@"Нет, мне (\d+)"] = "Извини, тебе {1} лет",
[@"Повтори"] = "Повторяю: тебе {0} лет"
};
const RegexOptions answerPatternOpt = RegexOptions.IgnoreCase;
App(ReadOnlySpan<string> args) { }
static void Main(string[] args) => new App(args.AsSpan()).Run();
public void Run()
{
var expectedYears = rand.Next(1, 20);
var actualYears = -1;
Console.WriteLine($"Тебе {expectedYears} лет?");
string answerPattern = null!;
while (true)
{
Console.Write(">>> ");
var answer = Console.ReadLine();
Match match = null!;
foreach (var pattern in answerFormats.Keys)
{
match = Regex.Match(answer, pattern, answerPatternOpt);
if (match.Success)
{
if (match.Groups.Count == 2)
{
if (!int.TryParse(match.Groups[1].Value, out actualYears))
{
WriteError("некорректный возраст".AsSpan());
continue;
}
}
answerPattern = pattern;
break;
}
}
if (answerPattern != null) break;
WriteError("неверный синтаксис".AsSpan());
}
Console.WriteLine(string.Format(answerFormats[answerPattern], expectedYears, actualYears));
}
static void WriteError(ReadOnlySpan<char> msg)
{
var tempFc = Console.ForegroundColor;
Console.ForegroundColor = ConsoleColor.Red;
Console.Write("Ошибка: ");
Console.WriteLine(msg);
Console.ForegroundColor = tempFc;
}
}
Такой код легко расширяем. Вы можете без проблем увеличить кол-во ответов с 3 до 4 и добавить внутрь инициализатора answerFormats вот такую строчку:
[@"Нет"] = "Извини"