2016-04-22 76 views
0

我是絕對初學者通過Stroustrup的「編程原則和實踐」的書。文件結束輸入不工作

在第4章中介紹了文件結束輸入;在前面的代碼片段中使用的Ctrl-D。我現在正在處理的代碼是這個簡單的向量示例。

我認爲Ctrl-D應該退出range-for循環,然後cout計算,但是這不起作用。我只能通過Ctrl-Z(已停止),Ctrl-C或|來退出程序,並且看不到任何結果(管道)符號,其他任何東西都只是延續了輸入循環。

我在linux上使用終端仿真器(終止符)來編寫,運行和編譯。我已經在Code :: Blocks中嘗試了相同的代碼,輸出完全相同。

請;我怎麼能擺脫輸入循環?

#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

輸入你想要的一切後按Ctrl + D – GMichael

+0

你有沒有嘗試與另一個終端模擬器? – perencia

+0

Ctrl + D不起作用。我也在Xterm和xfce4的終端中嘗試了這一點,結果相同。我甚至嘗試了不同的鍵盤來確認我不會發瘋;相同的結果。 –

回答

0

在類Unix系統(至少在默認情況下),結束文件的條件,通過在一行的開頭按Ctrl-d或輸入觸發CTRL-D兩次,如果你是不在一行的開頭。從這個問題的接受答案: Why do I need to type Ctrl-D twice to mark end-of-file?

+0

Ctrl-D兩次(或更多)不會執行任何操作。 –

+0

感謝您的鏈接,我仍然無法打破它,但文章確實讓我使用while循環測試了我的EOF輸入。哪些工作... Ctrl-D確實打破了while循環。我想知道爲什麼它沒有擺脫for循環。 –

+0

@我的終端上的Cdr.Jameson,你的程序工作。我無法看到while和for循環之間的任何區別。 – loafbit

0

你似乎不走出for循環。要麼你可以定義你正在採取的值的擴展,所以它循環了很多次,或者你說while(input!= X),這樣當你給出一個X值時,它會離開循環。並檢查應與3個陳述不使用2.祝你好運

+0

如果你提供了一些代碼來真正幫助用戶,你的答案會更好。 – MERose