2017-02-13 1 views
-1

danke für die zeit meine frage zu lesen. Ich habe mich nur gewundert, ob es überhaupt etwas zu verkürzen gibt.sind sie Möglichkeiten, die Do und While-Anweisung zu verkürzen?

int nextValue; 
int PreValue; 
Do    // I wanna shorten this up without looping it. 
{ 
cout << "please put something that is greater than the previous value:"; 
cin >> nextValue 
} 
while (nextValue < preValue); 

sorry für die Noob Frage, immer noch versuchen, zu lernen, C++

+0

Möchten Sie wirklich nur die Anzahl der Zeilen von 6 auf etwas mit weniger Zeilen reduzieren? Was meinst du "verkürzen, ohne es zu schleifen"? –

Antwort

0

Ja, aber nicht viel. Ihre Lösung ist 8 Zeilen Code (das ist ziemlich klein ist, um mit zu beginnen) und der Code selbst kondensiert realistisch in 5 Zeilen auf Präferenz basieren könnte ...

int nextValue, preValue; 
do { 
    cout << "please put something that is greater than the previous value:"; 
    cin >> nextValue; 
} while (nextValue < preValue); 

Aber ich denke, man wegkommen könnte mit der Verwendung eine regelmäßige While-Schleife in Ihrem Beispiel. preValue muss initialisiert werden zu etwas, damit Ihr Vergleich Ihnen zuverlässige Ergebnisse geben kann. So wie es jetzt ist, preValue könnte -454234, 7654, 1, 0 sein ... wir wissen nicht, was es ist; Es wurde nicht initialisiert. Initialisieren Sie es und verwenden Sie dann eine normale While-Schleife. Mit initialisieren meine ich , indem ich ihm explizit einen Wert zuweise.

int nextValue = 0, preValue = INT_MIN; 
while (preValue < nextValue){ 
    cout << "please put something that is greater than the previous value:"; 
    cin >> nextValue; 
} 

Wenn Sie möchten, um einen Wert zu erhalten, ohne eine Schleife zu verwenden, ist eine Alternative, eine Funktion zu definieren, und es rekursiv aufrufen.

int getValue(int minValue){ 
    int input; 
    std::cout << "please put something that is greater than the previous value:"; 
    std::cin >> input; 

    input > minValue ? return input: return getValue(minValue); 
} 

value = getValue(preValue); 

die Lösung Kürzen ist auf jeden Fall möglich (man technisch alles auf einer Zeile setzen könnte), aber es ist immer ratsam, um zu versuchen, und Ihr Code lesbar und verständlich wie möglich zu machen. In meinem Beispiel wird sich getValue() weiterhin selbst aufrufen, bis der Benutzer einen Wert eingibt, der größer als das Minimum ist. Am Ende ist es nicht viel anders in Bezug auf die Codezeilen, aber es wird immer die Funktion verlassen, die Sie den Benutzer für die Eingabe viel kürzer bitten. Wird

int main(){ 
    //other statements here. 

    int nextValue; 
    int PreValue; 
    Do    // I wanna shorten this up without looping it. 
    { 
    cout << "please put something that is greater than the previous value:"; 
    cin >> nextValue 
    } 
    while (nextValue < preValue); 

    //more statements here. 
} 

...

int main(){ 
    int minValue = 10; 
    //other statements. 

    int value = getValue(minValue); 
    //more statements 
} 

Offensichtlich ist die rekursive Lösung ist mehr Code als die 5 Zeilen in dem ersten Beispiel, aber der Vorteil ist, dass es jetzt in seiner eigenen Funktion. Wenn Sie den Benutzer zu 5 verschiedenen Zeiten auffordern müssten, müssten Sie nur int value = getValue(min); 5 Mal statt der ganzen While-Schleife 5 mal schreiben.

+0

Danke. das hat mir wirklich geholfen, das Codieren so effizient wie möglich zu machen. – user7524392

Verwandte Themen