0

如何从以下代码中删除goto ?

#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>

bool is_prime(unsigned num)
{

   if(num==0 || num==1)
     return false;
   if(num==2)
     return true;
   for(unsigned i=2;i<=num-1;i++)
    if(num%i==0)
        goto step;

             return true;
      step:  return false;
}


int main(void)
{
  unsigned n;
  printf("enter the number: ");
  scanf("%u",&n);
  printf("%u\n",is_prime(n));
  return 0;
}
4

4 回答 4

2

将其替换为return false;return退出一个函数。代码甚至已经依赖于这种行为。

bool is_prime(unsigned num)
{
    if(num == 0 || num == 1)
        return false;
    for(int i = 2; i < num - 1; i++)
        if(num % i == 0)
            return false;

    return true;
}
于 2013-09-28T16:21:10.503 回答
1
if(num%i==0)    //if true return false and if fail return true.
    goto step;   

         return true;
  step:  return false; 

上面的块等于

    if(num%i==0)    //if true return false and if fail return true.
       return false;   
     return true;
于 2013-09-28T16:23:45.497 回答
1

嗯三种方式

if(num%i!=0)
       return false;
return true;

或者您可以使用else.

或者你可以做

return (num%i == 0);
于 2013-09-28T16:24:41.677 回答
1

删除goto语句并return false改用。

   if(num%i==0)
       // goto step;
       return false;

   return true;
于 2013-09-28T16:21:23.547 回答