2016-10-15 1 views
0

У меня проблемы с куском кода, и я хотел спросить, не могу ли я помочь. В основном я создаю программу, которая будет делить два числа, которые вводятся пользователем, и я хочу напечатать сообщение, если один из введенных чисел равен 0, однако эта часть кода работает некорректно. Ниже приведен код, который у меня есть.C++ распознающий входное значение 0

int main() 
{ 


float n1 = 0.0, n2 = 0.0, quotent = 0.0; 

int firstNumberRead = 0; 

int secondNumberRead = 0; 



firstNumberRead = scanf("%f", &n1); 

secondNumberRead = scanf("%f", &n2); 

//check that the attempt to read the number was successful 
if (firstNumberRead && secondNumberRead == 1) 
{ 
    //divide the first number by the second number 
    quotent = (n1/n2); 

    //print quotent 
    printf("%f", quotent);enter code here 
} 
else if (firstNumberRead || secondNumberRead == 0) 
{ 
    printf("invalid input - divide by zero is not allowed"); 
} 
else 
{ 
    printf("invalid input"); 
} 
scanf("%f", &n1); 
return (0); 

}

+3

'firstNumberRead && secondNumberRead == 1', скорее всего, не то, что вы на самом деле намерены. Посмотрите, как работают условия на C++. – user2296177

ответ

4

Есть множество проблем с этим кодом.

if (firstNumberRead && secondNumberRead == 1) 

Вы, вероятно, ошибаетесь в том, как условия работают на C++, проверьте свою учебную программу на предмет детальной exaplanation. Вы, скорее всего, хотел бы сказать

if(firstNumberRead == 1 && secondNumberRead == 1) 

Это будет только проверить, что оба scanf вызовы удалось прочитать значение. Затем вам нужно проверить фактическое значение, внутри выражения if.

других проблем проверяли неправильные переменные для 0 в числителе и знаменателе (вы проверили firstNumberRead и secondNumberRead снова Вы должны проверить n1 и n2 вместо:.

if (n1 == 0 || n2 == 0) 

Обычно это плохая идея использовать оператор == для переменные с плавающей запятой, но вы можете утверждать, что это имеет смысл для знаменателя (все остальные состояния легальны с точки зрения арифметики). Но вы можете посмотреть в std::abs и проверить, меньше ли он, чем какой-либо epsilon. Например:

if (abs(n1) < 0.001 || abs(n2) < 0.001) 

Наконец, вы, вероятно, хотите что-то вроде этого:

if (firstNumberRead == 1 && secondNumberRead == 1) 
{ 
    if (n1 == 0 || n2 == 0) 
    { 
     printf("invalid input - divide by zero is not allowed"); 
    } 
    else 
    { 
     //divide the first number by the second number 
     quotent = (n1/n2); 

     //print quotent 
     printf("%f", quotent); 
    } 
} 
else 
{ 
    printf("invalid input"); 
} 
+1

@SeanCampbell Примите решение, если оно решит вашу проблему. Вы можете сделать это, нажав на значок галочки под голосами этого ответа. – user2296177