Проверьте каждый номер, который вы генерируете, на предыдущие цифры:
List<int> listNumbers = new List<int>();
int number;
for (int i = 0; i < 6; i++)
{
do {
number = rand.Next(1, 49);
} while (listNumbers.Contains(number));
listNumbers.Add(number);
}
Другой подход заключается в создании списка возможных номеров и удалении номеров, которые вы выбираете из списка:
List<int> possible = Enumerable.Range(1, 48).ToList();
List<int> listNumbers = new List<int>();
for (int i = 0; i < 6; i++)
{
int index = rand.Next(0, possible.Count);
listNumbers.Add(possible[index]);
possible.RemoveAt(index);
}
с char b;
и scanf("%d",&b);
, scanf запишет sizeof (int)
байтов в b.
Это повредит другую память.
scanf("%hhd",&b);
записывает только один байт в b.
%d
требует int
:
int b;
Затем вам следует проверить значение возврата ваших scanf()
вызовов. Возвращают ли оба вызова 1
?
(scanf()
возвращает количество назначенных элементов ввода. Поскольку оба ваших вызова имеют один %...
, вы должны вернуть 1
в обоих случаях.)
Вы используете неверный спецификатор формата с
scanf("%d", &b);
Это должно быть
scanf("%c", &b);
Однако, поскольку есть предыдущий оператор scanf
, в буфере все еще есть символ новой строки. и чтобы отфильтровать это, вы можете использовать
scanf(" %c", &b);
Большинство спецификаторов формата автоматически отфильтровывают начальные пробелы, но %c
и %[]
и %n
этого не делают.
Из ошибки неясно, является ли спецификатор формата ошибочным или тип переменной.