2016-04-22 4 views
0

Ich bin ein Absolute Anfänger arbeiten durch Stroustrup 'Programming Principles and Practice' Buch.Ende der Datei Eingabe funktioniert nicht

In Kapitel 4 wurde die Eingabe des Dateiendes eingeführt; Strg-D, die an früheren Code-Schnipsel funktioniert hat. Der Code, an dem ich gerade arbeite, ist dieses einfache Vektorbeispiel.

Ich glaube, Ctrl-D sollte die Range-for-Schleife verlassen und dann die Berechnungen, aber dies funktioniert nicht. Ich kann das Programm nur verlassen und keine Ergebnisse sehen, über Strg-Z (gestoppt), Strg-C oder die | -Taste (Pipe) -Symbol, irgendetwas anderes setzt einfach die Eingangsschleife fort.

Ich bin auf Linux mit einem Terminal-Emulator (Terminator) zum Schreiben, Ausführen und Kompilieren. Ich habe den gleichen Code in Code :: Blocks versucht und die Ausgabe ist genau das gleiche.

Bitte; Wie kann ich aus der Eingangsschleife ausbrechen?

#include "std_lib_facilities.h"  //provided PPP header file 

int main() 
{ 
    vector<double>temps; 
    for (double temp; cin >> temp;) //get stuck in here 
     temps.push_back(temp); 

    double sum=0;     //want to get to here 
    for (double x : temps) sum += x; 
    cout << "Average temperature: " << sum/temps.size() << endl; 

    sort(temps.begin(),temps.end()); 
    cout << "Median temperature: " << temps[temps.size()/2] << endl; 
} 
+0

Drücken Sie Strg + D nach der Eingabe alles, was Sie wollen – GMichael

+0

haben Sie versucht, mit einem anderen Terminal-Emulator? – perencia

+0

Strg + D funktioniert nicht. Ich habe das auch in Xterm und Xfce4 Terminal versucht, das gleiche Ergebnis. Ich habe sogar eine andere Tastatur ausprobiert, um zu bestätigen, dass ich nicht verrückt werde. gleiches Ergebnis. –

Antwort

0

Auf Unix-ähnlichen Systemen (zumindest in der Standardeinstellung), eine End-of-File-Bedingung, indem Sie Strg-D am Anfang einer Zeile oder durch Eingabe von Strg-D zweimal ausgelöst wird, wenn Sie nicht am Anfang einer Zeile. Von der angenommenen Antwort dieser Frage: Why do I need to type Ctrl-D twice to mark end-of-file?

+0

Ctrl-D zweimal (und mehr) tut nichts. –

+0

Danke für den Link, ich kann es immer noch nicht durchbrechen, aber der Artikel hat mich dazu gebracht, meine EOF-Eingabe mit einer While-Schleife zu testen. Was funktioniert ... Ctrl-D hat die while-Schleife verlassen. Ich frage mich, warum es nicht aus der for-Schleife ausbricht. –

+0

@ Cdr.Jameson auf meinem Terminal, funktioniert Ihr Programm.Ich kann keinen Unterschied zwischen while und for-Schleife sehen. – loafbit

0

Sie scheinen nicht für Schleife heraus zu kommen. Entweder kannst du die Amputation der Werte definieren, die du nimmst, so dass es oft wiederholt wird, oder du sagst while (input! = X), so dass du, wenn du einen X-Wert gibst, die Schleife verlässt. Und überprüfen Sie, dass für sollte mit 3 Aussagen nicht verwendet werden 2. Viel Glück

+0

Ihre Antwort wäre viel besser, wenn Sie Code zur Verfügung stellen, um dem Benutzer tatsächlich zu helfen. – MERose

Verwandte Themen