如何在 C 中创建一个仅提示用户输入正整数并在主函数中调用它的函数?

How to create a function in C that prompts the user for positive integers only and call it in the main function?

这是我的代码。我没有在 printf 函数后使用 break 关键字来跳出循环。当我输入负数或零时,它不会再次提示我重新输入。


#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);  
    }
  }
}

函数get_positive_int()中的算法错误:

  1. 您需要将 i = get_int("Integer: "); 放在 while 循环中。

  2. 您的if条件:

if (i < 1)

是错误的,因为 return i 如果 i 是负整数或 0。如果你想 return ii 是一个正整数或 0 你应该使用 if(i >= 0).

  1. 请注意,您还可以放置:
if (i == INT_MAX)
{
   // optional error handling.
   return INT_MAX;
}

调用维护后发生读取错误。但是如果你只想 return 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 的 return 类型应为 void 而不是 int 并且应省略 return i 因为没有必要 return 函数中的任何值。