CLion中while(cin>>x)輸入EOF終止後,後面的語句不被執行?

各位巨巨好,題主正在學習accelerated c++,在使用clion的過程中遇到了如下問題。書上的示例代碼是

#include &
#include &
#include &

using std::cin;
using std::cout;
using std::endl;
using std::setprecision;
using std::string;
using std::streamsize;

int main()
{
cout &<&< "Please enter your first name: "; string name; cin &>&> name;
cout &<&< "Hello, " &<&< name &<&< "!" &<&< endl; cout &<&< "Enter your midterm and final exam grads: "; double midterm, final; cin &>&> midterm &>&> final;

cout &<&< "Enter your homework grades, " "followed by end-of-file: "; int count = 0; double sum = 0; double x; while (cin &>&> x)
{
++count;
sum += x;
}

streamsize prec = cout.precision();
cout &<&< "Your final grades is " &<&< setprecision(3) &<&< 0.2 * midterm + 0.4 * final + 0.4 * sum / count &<&< setprecision(prec) &<&< endl; return 0; }

這段代碼的目的是輸入期中期末成績和歷次作業成績,給出平均成績。運行代碼,輸入了相應的名字、期中、期末成績,在執行while(cin &>&> x),輸入歷次平時成績後。題主輸入cmd+D(已確認是clion中的EOF快捷鍵),發生了如下現象

可見雖然終止了while但是後面的輸出也不執行了。求問各位這是神馬原因?有辦法調整嗎(;′⌒`)...謝謝


今天同樣為這個問題所困擾,調試的時候發現,好像clion將ctrl+d當做SIGHUP信號進行處理了,並沒有將其轉換成流結束指示器EOF。


這是Clion IDE的一個bug,EOF之後的stdout輸出會丟失掉。

下列方法可以暫時解決。

  1. Go to the Find Action Dialog box (CMD+SHIFT+A)
  2. Search for "Registry..."
  3. Untick run.processes.with.pty


有很多ide的控制台都有EOF這個問題 包括eclipse和clion。。

你可以試試codeblocks 雖然界面比較丑。clion可以點擊那個小蟲子的debug圖標進行運行,那會彈出一個黑框進行輸入,就沒有控制台的問題了。


我這裡測試沒有問題,估計就是cmd+D直接將程序終止了。

沒有用過CLion,你試試Ctrl+Z?


推薦閱讀:

關於Vert.x的冷知識
要獲得「機器學習或數據科學」的工作,到底選哪種編程語言更好?
多維度分析2017年最熱門的編程語言
C語言基礎:函數的聲明與定義
AppleScript類自然語言與非英語語法設計

TAG:編程語言 | 演算法 | 編程 | C | CLion |