(C) Scanf - ввод получает 0 каждый раз

Проверьте каждый номер, который вы генерируете, на предыдущие цифры:

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);
}
1
задан artmo-CSstudent 3 March 2019 в 09:04
поделиться

3 ответа

с char b; и scanf("%d",&b);, scanf запишет sizeof (int) байтов в b.
Это повредит другую память.
scanf("%hhd",&b); записывает только один байт в b.

0
ответ дан xing 3 March 2019 в 09:04
поделиться

%d требует int:

int b;

Затем вам следует проверить значение возврата ваших scanf() вызовов. Возвращают ли оба вызова 1?

(scanf() возвращает количество назначенных элементов ввода. Поскольку оба ваших вызова имеют один %..., вы должны вернуть 1 в обоих случаях.)

0
ответ дан meaning-matters 3 March 2019 в 09:04
поделиться

Вы используете неверный спецификатор формата с

scanf("%d", &b);

Это должно быть

scanf("%c", &b);

Однако, поскольку есть предыдущий оператор scanf, в буфере все еще есть символ новой строки. и чтобы отфильтровать это, вы можете использовать

scanf(" %c", &b);

Большинство спецификаторов формата автоматически отфильтровывают начальные пробелы, но %c и %[] и %n этого не делают.

Из ошибки неясно, является ли спецификатор формата ошибочным или тип переменной.

0
ответ дан Weather Vane 3 March 2019 в 09:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: