2016-08-09 2 views
1

Я новичок в C++ программирование и просто программирование вообще, и я шел через Принципы программирования Страуструп и практика С ++ 2-е издание, когда я застрял на главе 4 Дрель 6.Книга Stroustrup C++. Как отслеживать, какой целочисленный ввод является самым маленьким и самым большим в цикле while?

вопрос гласит: Напишите которая состоит из цикла while, который читается в двух ints и затем печатает их. Измените программу, чтобы записать меньшее значение и большее значение. и т. Д. И т. Д. Теперь измените тело петли так, чтобы она читала всего один раз каждый раз. Определите две переменные, чтобы отслеживать, какая из них самая маленькая, и которая является наибольшим значением, которое вы видели до сих пор. Каждый из них через петлю выписывает введенное значение. Если оно пока мало, напишите наименьшее количество после номера. Если он является самым большим до сих пор, напишите наибольшее число после номера.

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

Надеюсь, я смог четко объяснить ситуацию. Я уверен, что это просто очень простое решение, я новичок в программировании. Это мой код до сих пор:

#include "../../../std_lib_facilities.h"; 

int main() 
{ 
    double val1; 
    double val2; 
    double largest =0 ; 
    double smallest= 0 ; 
    double input = 0; 

    char exit = ' '; 

    while (exit != 'x') { 
     cout << "Please enter two numbers.\n"; 
     cin >> val1 >> val2; 
     cout << "The two values you have entered are: " << val1 << " and " << val2 << "\n"; 

     if (val1 < val2) { 
      cout << "The smaller value is: " << val1 << ". The larger value is: " << val2 << ".\n"; 
      if (val2 - val1 <= .5) 
       cout << "The numbers are almost equal.\n"; 
     } 
     else if (val2 < val1) { 
      cout << "The smaller value is: " << val2 << ". The larger value is: " << val1 << ".\n"; 
      if (val1 - val2 <= .5) 
       cout << " The numbers are almost equal.\n"; 
     } 
     else 
      cout << "The two numbers " << val1 << " are equal!\n"; \ 

      if (val1 < smallest && val2>val1) { 
       cout << val1 << " is the smallest so far.\n"; 
       smallest = val1; 
      } 
      else if (val2<smallest && val1>val2) { 
       cout << val2 << " is the smallest so far.n"; 
       smallest = val2; 
      } 
      else {} 


      if (val1 > largest && val2 < val1) { 
       cout << val1 << " is the largest so far.\n"; 
       val1 = largest; 
      } 
      else if (val2 > largest && val1 < val2) { 
       cout << val2 << " is the largest so far.\n"; 
       val2 = largest; 
      } 
      else { 

      } 

      cout << "If you would like to exit this program, please enter x. Otherwise, enter any other key to continue. \n"; 
      cin >> exit; 
    } 
} 
+1

Почему есть '\' после этой строки кода: 'соиЬ < <"Два числа" << val1 << "равны! \ N"; \ 'в первой строке кода после вашего оператора' else' без фигурных скобок ('{}')? Вы также должны удалить лишние инструкции 'else {}'. –

+1

Привет. Спасибо за консультацию. Я понятия не имею, почему я положил «\» там. Я, наверное, довольно устал. Для заявления else мне всегда говорили, что вам не нужны фигурные скобки!?!? И я добавил инструкцию else в конце, чтобы код ничего не делал, если ни одно из условий не соответствует. Если вы можете исправить любое из этих предположений, я бы очень признателен. –

+0

** Первый **, оператор 'else' без фигурных скобок выполняет только тот код, следующий за ним, пока не будет достигнута точка с запятой ('; '). Это также верно для операторов 'for' и' while'. Я всегда использую фигурные скобки с любыми выражениями 'if-elseif-else',' for' или 'while', потому что не использовать их приводит к глупому, иногда трудному обнаружению, ошибкам. ** Второе **, если ни одно из условий не приводит к истинному в выражении 'if', то подразумевается, что ничего не будет выполнено. Когда вы добавляете оператор 'else {}', тогда код в фигурных скобках будет выполнен, в этом случае ничего, поэтому они излишни. –

ответ

4

Вы не отслеживание наибольшего значения правильно.

  cout << val1 << " is the largest so far.\n"; 
      val1 = largest; // Wrong 

должен быть

  cout << val1 << " is the largest so far.\n"; 
      largest = val1; 

и

  cout << val2 << " is the largest so far.\n"; 
      val2 = largest; // Wrong 

должен быть

  cout << val2 << " is the largest so far.\n"; 
      largest = val2; 
Смежные вопросы