2017-09-22 3 views
-1

Ich habe Probleme beim Versuch, ein Problem mit meinem Code zu beheben, wenn ich den zweitkleinsten einer zufälligen Anzahl von Eingängen gefunden habe. Immer wenn ich zwei oder mehr Zahlen mit dem gleichen Wert nach jedem und gefolgt von verschiedenen höheren Zahlen (zB: 1 ​​1 3 4) eingeben (zB 3 3 3 4 5), bekomme ich immer den Fehler, obwohl das nicht das ist, was ich will das Programm zu tun. Alle Hinweise würden wirklich geschätzt werden. Danke!Zweiter Kleinster Programm-Eingang

#include <iostream> 
#include <vector> 
#include <stdexcept> 
using namespace std; 

int main() 
{ 
    double smallest, second_Smallest,a; 
    vector<double> v(0); 

    cout << "Enter the numbers in random order: " << endl; 
    try 
    { 
     while (cin >> a) 
     { 
      v.push_back(a); 
     } 

     if(v[0] < v[1]) 
     { 
      smallest = v[0]; 
      second_Smallest = v[1]; 
     } 
     else 
     { 
      smallest = v[1]; 
      second_Smallest = v[0]; 
     } 

     for(int i = 2; i < v.size(); i++) 
     { 
      if (smallest > v[i]) 
      { 
       second_Smallest = smallest; 
       smallest = v[i]; 
      } 
      else if (v[i] < second_Smallest) 
      { 
       second_Smallest = v[i]; 
      } 
     } 

     if (smallest == second_Smallest) 
     { 
      throw runtime_error("no second smallest"); 
     } 
     else 
     { 
     cout << "The second smallest number is " << second_Smallest << endl; 
     } 
    } 

    catch (runtime_error) 
    { 
     cout << "error: no second smallest " << endl; 
    } 

    return 0; 
} 
+1

Speichern Sie die Eingabe in einen Satz. Das zweite Element wird das zweitkleinste sein. – NathanOliver

+0

schlagen Sie nicht für solche trivialen Probleme vor. Es wird unnötig die Verarbeitung verlangsamen. – user2407394

Antwort

0

Dies liegt daran, Ihr Code kleinste und zweitkleinste auf denselben Wert gesetzt und es nie zurückgesetzt, wenn die ersten zwei Zahlen gleich sind und alle andere sind höher. Eigentlich brauchen Sie nicht zwei spezielle if-Bedingungen.

Versuchen Sie folgendes:

#include <iostream> 
#include <vector> 
#include <stdexcept> 
using namespace std; 

int main() 
{ 
    double smallest = 0xffff, second_Smallest=0xffff ,a; 
    vector<double> v(0); 

    cout << "Enter the numbers in random order: " << endl; 
    try 
    { 
     while (cin >> a) 
     { 
      v.push_back(a); 
     } 

     for(int i = 0; i < v.size(); i++) 
     { 
      if (smallest > v[i]) 
      { 
       second_Smallest = smallest; 
       smallest = v[i]; 
      } 
      else if (v[i] < second_Smallest) 
      { 
       second_Smallest = v[i]; 
      } 
     } 

     if (0xffff == second_Smallest) 
     { 
      throw runtime_error("no second smallest"); 
     } 
     else 
     { 
     cout << "The second smallest number is " << second_Smallest << endl; 
     } 
    } 

    catch (runtime_error) 
    { 
     cout << "error: no second smallest " << endl; 
    } 

    return 0; 
}