2013-02-15 1 views
1
if (num2 != 0) 
    printf("\nInput 3/Input 2 (int) %12d", divide); 
else if (num2 == 0) 
    printf("\nInput 3/Input 2 (int) DIV/0"); 


if (flt4 != 0) 
    printf("\nInput 2/Input 1 (double) %16.3f", divide2); 
else if (flt4 == 0) 
    printf("\nInput 2/Input 1 (double) DIV/0"); 

Когда я устанавливаю num2 или flt4 равным 0, программа вылетает из строя. В противном случае он отлично работает. Я просматривал прочтение утверждений if/else, и я считаю, что мое форматирование верное, но, очевидно, есть ошибка.C: Если оператор не работает

Спасибо.

EDIT:

код, где я определить разрыв является:

void calculate (int num1, int num2, int num3, float flt4,int* sum,int* mult, 
      int* mod,int* divide,double* mult2,double* divide2) 
{ 

*sum = num1 + flt4; 
*mult = num1 * num3; 
*mod = (num1/10)%10; 
*divide= num3/num2; 
*mult2= num1 * flt4; 
*divide2= (double)num2/num1; 
return; 
} 

Мой вопрос заключается в том, как я структурировать эту программу так, если она делит на ноль, я могу показать, что в функции печати ,

+0

Там нет ничего плохого с кодом. Он должен разрушиться в другом месте, чем то, что вы вставили. BTW - вам не нужно указывать другое «if» после «else», поскольку это уже подразумевается предыдущим if. – Grzegorz

+1

Учитывая, что 'divide' является переменной, а не функцией, называемой на месте, я бы сказал, что вы всегда ** выполняете разделение и только после этого (и сохранили результат в' divide 'variable) вы проверяете, что знаменатель отличен от нуля. Конечно, если это (будет) ноль, то ваша программа уже разбилась. – 2013-02-15 22:20:07

+2

Показать код, в котором вы указываете 'divide'. Это похоже на 'divide = something/num2'? Если это так, то вы делите на 0, что недействительно. – Brigham

ответ

5

Скорее всего, вы делите на ноль. Переменная divide устанавливается перед «if», и вы все равно выполняете эту операцию. Поместите это внутри первого «if», поэтому он разделится на num2, если num2 отличается от нуля.

Edit: Он должен выглядеть так:

if (num2 != 0) { 
    divide = something/num2; 
    printf("\nInput 3/Input 2 (int) %12d", divide); 
} 
+0

Я бы сделал это, но учитель уточнил, что я должен делать все вычисления в отдельной функции вычисления. Итак, единственное решение состоит в том, чтобы сделать другую переменную в функции вычисления, которая является логической, если она равна нулю или нет? – 0x41414141

+0

Итак, используйте функцию 'calculate' после проверки правильности значений. Вы не должны выполнять '* divide = num3/num2;' перед проверкой переменных. – sobol6803

+0

ahh. ОК. спасибо, плохо сделайте это. – 0x41414141