【问题标题】:how to check if there is a division by zero in c如何检查c中是否有除零
【发布时间】:2010-03-21 01:56:01
【问题描述】:
#include<stdio.h>
void function(int);

int main()
{
     int x;

     printf("Enter x:");
     scanf("%d", &x);

function(x);

return 0;
}

void function(int x)
{
    float fx;

    fx=10/x;

    if(10 is divided by zero)// I dont know what to put here please help
        printf("division by zero is not allowed");
    else
        printf("f(x) is: %.5f",fx);

}

【问题讨论】:

    标签: c divide-by-zero


    【解决方案1】:
    #include<stdio.h>
    void function(int);
    
    int main()
    {
         int x;
    
         printf("Enter x:");
         scanf("%d", &x);
    
    function(x);
    
    return 0;
    }
    
    void function(int x)
    {
        float fx;
    
        if(x==0) // Simple!
            printf("division by zero is not allowed");
        else
            fx=10/x;            
            printf("f(x) is: %.5f",fx);
    
    }
    

    【讨论】:

      【解决方案2】:

      应该这样做。在执行除法之前,您需要检查是否被零除。

      void function(int x)
      {
          float fx;
      
          if(x == 0) {
              printf("division by zero is not allowed");
          } else {
              fx = 10/x;
              printf("f(x) is: %.5f",fx);
          }
      }
      

      【讨论】:

        【解决方案3】:

        默认情况下,在 UNIX 中,浮点除以零不会因异常而停止程序。相反,它会产生infinityNaN 的结果。您可以使用isfinite 检查这些都没有发生。

        x = y / z; // assuming y or z is floating-point
        if ( ! isfinite( x ) ) cerr << "invalid result from division" << endl;
        

        或者,您可以检查除数是否不为零:

        if ( z == 0 || ! isfinite( z ) ) cerr << "invalid divisor to division" << endl;
        x = y / z;
        

        【讨论】:

        • 它不是浮点除以零 - 它是整数(整数除法表达式的结果随后转换为浮点数)。
        • @Paul:他的代码确实如此,但我没有复制他的代码。我添加了一条评论,这有帮助吗?
        【解决方案4】:

        对于 C99,您可以使用 fetestexcept(2) 等。

        【讨论】:

        • 这仅适用于浮点异常吗?上面的例子是一个整数除以零。
        猜你喜欢
        • 1970-01-01
        • 2011-04-13
        • 2014-06-24
        • 1970-01-01
        • 1970-01-01
        • 2014-12-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多