1

Тема: Обмеження введених цифр

Добрий день, виконую практичну роботу.  "Реалізувати заповнення двовимірного масиву числами 0 - 9 двома способами:
- введення з клавіатури; «рандомні» значення. Роздрукувати отриманий масив" - усе зрозуміло крім одного, як зробити обмеження цифр, які вводяться? Програму я написала, але умови не виконуються. Тобто при введенні 10 або -1 програма підтримує значення. Підкажіть будь-ласка, як правильно потрібно зробити, щоб програма не давала ввести цифри, що не належать діапазону (заповнення масиву закінчувалося/перезапускалася)

int filling_outtwo (int *arr[N][M]) //введение с клавиатуры
{
    int k, p;
    int number;
    for (k = 0; k < N; k++)
    {
        for (p = 0; p < M; p++)
        {    
            printf("Arr[%d][%d] = ", k, p);
            scanf("%d", &number);
            if (number >= 9 || number <= 0)
            {
                printf("Error! Values are unacceptable! \n");
                break;
            }
        }
    }
}

2

Re: Обмеження введених цифр

0. Коментар - офтоп. Більше так не робіть.
1. Функція нічого не повертає, але тип указаний як int. Може, варто переробити на void?
2. Якийсь дивний тип параметра. Не можу бути певним, але підозрюю, що * зайва.
3. Змінну циклу, якщо вона не потрібна після циклу, бажано проголошувати в циклі, на кшталт

for (int k = 0; k < N; k++)

Таким чином ви убезпечуєтеся від захаращення коду використаними змінними.
4. break перериває лише один цикл (найближчий, в цьому випадку - по p). Якщо ви хочете вийти з функції - використовуйте return, завершити роботу програми - exit() (останнє не рекомендовано).
5. Ви навіть не намагаєтеся присвоїти введене значення (number) елементу масиву arr. А без цього незрозуміло, що ця функція взагалі робить.

Подякували: MaxPluto1

3 Востаннє редагувалося lucas-kane (15.02.2023 01:47:00)

Re: Обмеження введених цифр

MaxPluto написав:

... Тобто при введенні 10 або -1 програма підтримує значення. ...

  /* ... */
  if (number >= 9 || number <= 0)
  {
      printf("Error! Values are unacceptable! \n");
      break;
   }
  /* ... */

Звичайно вона буде лишати ці числа 10 та -1, тому що це останнє, що запам'ятав number після BREAK.
Окрім тогоб, твоя умова не відповідає поставленому завданню:

MaxPluto написав:

Реалізувати заповнення двовимірного масиву числами 0 - 9

(За твоєю умовою ти первіряєш чи попадає number у [1..8]. Якщо FALSE, тоді BREAK;)

Якщо добре глянеш у конспекст, там має бути щось на зразок цього:

(N < 0 || N> 9) <--- ЧИ ---> !(N >= 0 && N <= 9) для [0..9]

І взагалі прибери IF, BREAK та викорстай третій вкладений цикл WHILE, DO..WHILE. Поки умова FALSE, тоді вводиш число до тих пір поки не буде TRUE.

Подякували: MaxPluto1