2015-02-05 2 views
-1

Я пишу простую программу, которая делает int division и показывает остаток. Я пытаюсь, чтобы программа работала непрерывно, пока пользователь не вводит 0 0. Программа останавливается после того, как пользователь ставит 0 0, но не раньше, чем каждый раз говорит «Исключение с плавающей запятой». Это код:Исключение с плавающей точкой в ​​C++?

#include <stdio.h> 

int main(){ 

    int x; 
    int y; 

    while (1){ 
    if (x && y == 0) 
     break; 
    else  
    scanf ("%i %i", &x , &y); 
    printf("%i %i/%i\n" , x/y , x % y, y); 
    } 


return 0; 

} 
+0

решаемая. Спасибо всем за вашу помощь ... – BRK

ответ

0

Вы должны проверить на 0 перед выполнением операции:

#include <stdio.h> 

int main(){ 

    int x; 
    int y; 

    while (1){ 
    scanf ("%i %i", &x , &y); 

    if (x == 0 && y == 0) 
     break; 

    printf("%i %i/%i\n" , x/y , x % y, y); 
    } 

return 0; 

} 
+0

Да, только что отредактирован. Не прочитал полный код, увидев очевидную (для меня) первую ошибку. –

+0

Вы должны - (1) Инициализировать x и y до некоторого значения (ноль, возможно?). (2) Проверьте возвращаемое значение 'scanf', чтобы увидеть, был ли вход успешным и обе переменные были инициализированы. –

+0

@HappyGreenKidNaps: Если вы инициализировали vars до 0 в исходном коде, он никогда не достиг скана. Справедливости ради, это позаботилось об исключении с плавающей запятой (даже при ошибочном сравнении, я думаю). –

0

if (x && y == 0) не делать то, что вы думаете, что он делает. Вероятно, вы имели в виду if (x == 0 && y == 0).

Также вы не должны работать с любыми неинициализированными значениями. Дайте им соответствующие значения перед использованием этих переменных в любых выражениях или, по крайней мере, убедитесь, что пользовательский ввод выполняется до их применения.

1

Ваш неверный порядок. Вы делаете это в таком порядке:

  1. Проверьте, если мы сделали (неправильно, как вам нужно x == 0 && y == 0)
  2. Чтение пользовательского ввода
  3. Запись рассчитывается выход

Вы не проверить, вы закончите, прежде чем вычислять выход, поэтому сначала выполняется сбой вычисления.

Смежные вопросы