C退出功能没有做我想的那样

时间:2010-10-09 16:59:50

标签: c exit

当我使用调试器时,我可以告诉退出没有退出该功能。我使用退出功能错了吗? (我必须)我该如何解决这个问题?

int is_prime(int x,char array[]){
int divider = (x-1);   
float test;

  while(x>-1){
  test = isdigit((x % divider));  //isdigit returns !0 if digit
    if(divider == '1'){
    return(1);  //if divider reaches 1 then the number is prime
    exit;
    } 
    if(test  == '0'){
    return (0);//not prime
    exit;
    }
  divider--;
  }

}

6 个答案:

答案 0 :(得分:5)

函数的名称本身(后面没有括号)只是为您提供函数的地址而不调用它。在C中,最基本的语句是一个表达式,它的副作用被评估,表达式的结果值被忽略。因此,像exit;3;这样没有副作用的声明是合法的,但实际上并没有做任何事情,也可能被删除。有些编译器会给你关于这些毫无意义的语句的警告,尽管你可能需要打开额外的诊断警告来获取它们。使用这些选项(例如-Wall gcc)是一个非常好的主意,可以帮助您避免这样的陷阱。

答案 1 :(得分:2)

你必须打电话给它:

exit(0);

另外,如果你在返回之后放置它,它将永远不会被调用,因为return从函数返回。

编辑:而且,正如其他人所说,退出退出程序,所以你可能不想在这里使用退出。

答案 2 :(得分:1)

阅读exit(3)手册。

答案 3 :(得分:1)

声明:

exit;

向GCC发出以下警告:

C:\temp\test.c:71: warning: statement with no effect

发生的事情是你有一个表达式来计算exit()函数的地址 - 但该表达式实际上并没有对该地址做任何事情。它类似于你有如下声明:

1 + 2;

这是有效的C,但它对任何事都没有影响。

要调用函数as Thomas Padron-McCarth said,您必须拥有参数列表(即使它们对于某些函数是空的):

exit(0);

答案 4 :(得分:1)

除了returnexit的错误之外,你在使用整数和字符的方式上也有一个错误。 isdigit是一个仅应用于字符的函数,如果字符在'0''9'之间,则为true,但是应该知道C中的字符符号只是一种奇特的方式编写代码点(大多数时候是ASCII)。因此,当您在C程序中编写'1'时,编译器将看到49,如果您编写'a'编译器实际看到97。这意味着isdigit将值true返回4857,可能不是您想要的。在您将divider'1'进行比较的行中,实际上您将其与49进行比较(IBM大型机除外,其中'1'241

你的循环是无限的,它取决于x的值,但x在循环中没有改变,因此while中的条件永远不会改变。

编辑:这里是更正后的代码

int is_prime(uint_t x)
{
uint_t divider;

  if(x <= 3)
    return 1;

  for(divider = x-1; ; divider--) {

    if(x % divider  == 0)
      return 0; //not prime

    if(divider == 1)
      return 1;  //if divider reaches 1 then the number is prime

  }
}

答案 5 :(得分:0)

exit退出进程,而不是函数。你想要return