2015-09-19 3 views
0

Я проверил новую книгу на C++, когда я сделал одно из упражнений в ней. Программа получает длину, за которой следует ее единица. Программа преобразует значение в сантиметры, а затем сравнивает значение с предыдущими входами и дает выходное сообщение, которое является самым большим и наименьшим значением, введенным до сих пор. Проблема заключается в том, что, по-видимому, проблема связана с устройством «ноги». Ниже мой main.cpp:Часть программы не выполняется после первого запуска.

#include "std_lib_facilities.h" 
int main() 
{ 
    double value{0}; 
    double largest{0}; 
    double smallest{0}; 
    string unit; 
    constexpr double cm_per_in {2.54}; 
    constexpr double cm_per_m {100}; 
    constexpr double cm_per_ft {cm_per_in*12}; 
    int sum; 

    while(cin >> value >> unit) 
    { 
     if(unit=="cm") 
     { 
      if(largest==0 && smallest == 0){ 
       smallest = value; 
       largest = value; 
       cout << value << "cm is the only value entered till now.\n"; 
      } 
      else if(value<smallest) 
      { 
       smallest = value; 
       cout << "\n\nThe smallest so far is "<<smallest<<"cm.\n"; 
       cout << "\nThe largest so far is "<<largest<<"cm.\n"; 
      } 
      else if(value>largest){ 
       largest = value; 
       cout << "The smallest so far is "<<smallest<<"cm.\n"; 
       cout << "\nThe largest so far is "<<largest<<"cm.\n"; 
      } 
      sum += value; 

     } 
     else if(unit=="m") 
     { 
      if(largest==0 && smallest == 0){ 
       smallest = value*cm_per_m; 
       largest = value*cm_per_m; 
       cout << value*cm_per_m << "cm is the only value entered till now.\n"; 
      } 
      else if(value*cm_per_m<smallest) 
      { 
       smallest = value*cm_per_m; 
       cout << "The smallest so far is "<<smallest<<"cm.\n"; 
       cout << "\nThe largest so far is "<<largest<<"cm.\n"; 
      } 
      else if(value*cm_per_m>largest){ 
       largest = value*cm_per_m; 
       cout << "\nThe smalles so far is "<<smallest<<"cm.\n"; 
       cout << "The largest so far is "<<largest<<"cm.\n"; 
      } 
      sum += value*cm_per_m; 

     } 
     else if(unit=="ft") 
     { 
      if(largest==0 && smallest == 0){ 
       smallest = value*cm_per_ft; 
       largest = value*cm_per_ft; 
       cout << value*cm_per_ft << "cm is the only value entered till now.\n"; 
      } 
      else if(value*cm_per_ft<smallest) 
      { 
       smallest = value*cm_per_ft; 
       cout << "The smallest so far is "<<smallest<<"cm.\n"; 
       cout << "\nThe largest so far is "<<largest<<"cm.\n"; 
      } 
      else if(value*cm_per_ft>largest){ 
       largest = value*cm_per_ft; 
       cout << "\nThe smallest so far is "<<smallest<<"cm.\n"; 
       cout << "The largest so far is "<<largest<<"cm.\n"; 
      } 
      sum += value * cm_per_ft; 

     } 
     else if(unit=="in") 
     { 
      if(largest==0 && smallest == 0){ 
       smallest = value*cm_per_in; 
       largest = value*cm_per_in; 
       cout << value*cm_per_in << "cm is the only value entered till now.\n"; 
      } 
      else if(value*cm_per_in<smallest) 
      { 
       smallest = value*cm_per_in; 
       cout << "The smallest so far is "<<smallest<<"cm.\n"; 
       cout << "The largest so far is "<<largest<<"cm.\n"; 
      } 
      else if(value*cm_per_in>largest){ 
       largest = value*cm_per_in; 
       cout << "The smallest so far is "<<smallest<<"cm.\n"; 
       cout << "The largest so far is "<<largest<<"cm.\n"; 
      } 
      sum += value * cm_per_in; 

     } 
    } 
    return 0; 
} 

Ниже вход/выход, который случилось с программой: D: \ C++ \ тестирование \ subtesting> Программа 24 см 24см единственное значение, введенное до сих пор ,

24 in 
The smallest so far is 24cm. 
The largest so far is 60.96cm. 

24 m 

The smallest so far is 24cm. 
The largest so far is 2400cm. 

24 ft 

Как вы можете видеть на приведенном выше выходе, нет выхода, если используется блок «ножек». Другой результат теста:

D:\C++\testing\subtesting>program 
24 ft 
731.52cm is the only value entered till now. 
24 ft 

The smallest so far is 731.52cm. 
The largest so far is 731.52cm. 
200 ft 

The smallest so far is 731.52cm. 
The largest so far is 6096cm. 
30 ft 

Кажется, что есть какая-то ошибка в коде «ноги». Иногда код работает, а иногда нет. Может кто-нибудь мне помочь?

+0

Ну, вот для чего нужен ваш отладчик, но не очень хороший вопрос о переполнении стека. –

+0

Пройдите код по строке в отладчике. Держу пари, ни одно из условий в футсах не является истинным. –

+0

Также уменьшите свой код до [MCVE], возможно, это поможет вам найти ошибку. –

ответ

0

С кодом ничего не написано. Что-то не так с вашими ожиданиями.

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

После ввода 24 и 24 м третье значение 24 фута не является ни большим, ни наименьшим, поэтому правильно не выводит выходной сигнал.

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