Как создать функцию в C, которая запрашивает у пользователя только положительные целые числа и вызывает ее в основной функции? - PullRequest
0 голосов
/ 08 апреля 2020

Это мой код. Мне не удалось использовать ключевое слово break после функции printf, чтобы вырваться из l oop. Когда я ввожу отрицательное число или ноль, я не получаю повторного ввода.


#include <stdio.h>
#include <cs50.h>

int get_positive_int(void);

int main (void)
{
    get_positive_int();
}


int get_positive_int(void)
{   
  int i;
  i = get_int("Integer: ");

  while (true)
  {
    if (i<1)
    {
       return i;
    }
    else
    {
       printf("%i", i);  
    }
  }
}

1 Ответ

2 голосов
/ 08 апреля 2020

Алгоритм в функции get_positive_int() неверен:

  1. Вам необходимо поместить i = get_int("Integer: "); внутри while l oop.

  2. Ваше if условие:

if (i < 1)

неверно, так как это вернет i, если i является отрицательным целым числом или 0. Если вы хотите вернуть i, когда i является положительным целым числом или 0, вы должны использовать if(i >= 0).

Обратите внимание, что вы также можете поместить:
if (i == INT_MAX)
{
   // optional error handling.
   return INT_MAX;
}

после вызова, чтобы сохранить возникновение ошибки чтения. Но если вы хотите вернуть только INT_MAX, вам не нужно этого делать, и вы можете его пропустить, поскольку это будет соответствовать условному выражению `` if (i> = 0) `и его телу.


Тогда код:

int get_positive_int(void)
{   
  int i;

  while (true)
  {
    i = get_int("Integer: ");

    if (i == INT_MAX)
    {
        // optional error handling.
        return INT_MAX;
    }
    else if (i >= 0)
    {
       return i;
    }

    printf("%i", i);  
  }
}

Примечание: если вы не хотите считать 0 как положительное целое число, вы должны иметь i >= 1 в качестве условия if оператор.


Как вы сказали в комментариях, вы хотите продолжить, только если i - положительное целое число, и выход, если i - отрицательные символы или 0:

void get_positive_int(void)
{   
  int i;

  while (true)
  {
    i = get_int("Integer: ");

    if (i < 1)
    {
       return;
    }

    printf("%i\n", i);  
  }
}

Обратите внимание, что в этом случае тип возвращаемого значения get_positive_int должен быть void вместо int, и он не должен возвращать i, так как нет необходимости возвращать какое-либо значение из функции.

...