如何在C

时间:2018-09-23 23:10:32

标签: c

我当前正在使用Visual Studio2015。系统指示我不允许除以零。我正在使用用户定义的函数通过参数计算结果并将结果返回到主函数中。

如何不允许除以零?这是在用户定义函数(getQuotient();)中完成的吗?

我也在使用用户定义函数来询问用户整数。在那里完成了吗?我是否限制用户输入0?

2 个答案:

答案 0 :(得分:2)

如果您的程序从用户那里收到两个整数ab,并且您想在计算a / b时避免除法溢出,则必须测试以下两种情况:

  • b == 0被零除具有不确定的行为。
  • 在使用二进制补码表示形式存储整数的系统上,a == INT_MIN && b == -1会导致除法溢出,因为结果不适合类型int。这也具有未定义的行为。

以上两种情况都会导致大多数当前PC架构上的程序提前终止。

答案 1 :(得分:0)

您不清楚要执行什么操作的问题。我假设您期望开发出可以执行基本计算器且除以零的限制。

这是使用单独的函数从用户接受操作数和运算符的代码。它还限制了除操作不能以)为除数执行。

# include <stdio.h>

double acceptData();
char acceptChar();
int main() {

    char operator;
    double firstNumber,secondNumber;
    operator = acceptChar();
    firstNumber = acceptData();
    secondNumber = acceptData();

    switch(operator)
    {
        case '+':
            printf("%.1lf + %.1lf = %.1lf",firstNumber, secondNumber, firstNumber + secondNumber);
            break;

        case '-':
            printf("%.1lf - %.1lf = %.1lf",firstNumber, secondNumber, firstNumber - secondNumber);
            break;

        case '*':
            printf("%.1lf * %.1lf = %.1lf",firstNumber, secondNumber, firstNumber * secondNumber);
            break;

        case '/':
            if(secondNumber == 0.0) {
              printf("cannot divide by zero..\n");
              }
            else{
              printf("%.1lf / %.1lf = %.1lf",firstNumber, secondNumber, firstNumber / secondNumber);
              }
            break;

        // operator doesn't match any case constant (+, -, *, /)
        default:
            printf("Error! operator is not correct");
    }

    return 0;
}

double acceptData() {
    double Number;
    printf("Enter the operand: ");
    scanf("%lf",&Number);
    return Number;
}

char acceptChar() {
  char operator;
  printf("Enter an operator (+, -, *,): ");
    scanf("%c", &operator);
  return operator;
}