2016-12-02 39 views
2

信號EOF在Mac OS X我最近開始學習C++,並已書中加速C++以下。我在第3章,我試圖運行書中給出的程序。我正在使用我的MAC OS上的CLion。代碼如下:如何與克利翁

#include "iomanip" 
#include "ios" 
#include "iostream" 
#include "string" 
#include "vector" 
#include "algorithm" 

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

int main() 
{ 
    // Ask for and read student's name 
    cout << "Please enter your name: "; 
    string name; 
    cin >> name; 
    cout << "Hello, "<< name << "!"<< endl; 

    // Ask for and read mid-term and final grades 
    cout << "Please enter your mid-term and final grades: "; 
    double midterm_grade, final_grade; 
    cin >>midterm_grade >> final_grade; 

    // Ask for homework grades 
    cout << "Enter all your homework grades, followed by end-of-file"; 

    vector<double> homework; 
    double x; 
    //Invariant : Homework contains all homework grades read so far 

    while (cin >> x) 
    { 
     homework.push_back(x); 
    } 

    // Check that the student entered some homework grade 

    typedef vector<double>:: size_type vector_size; 
    vector_size size = homework.size(); 

    if(size == 0) 
    { 
     cout << "You must enter your grades. Please try again" << endl; 
     return 1; 
    } 
// Sort the grades 
    sort(homework.begin(), homework.end()); 

// Compute the median output grade 

    vector_size mid = size/2; 
    double median; 
    median = size % 2 == 0 ? (homework[mid] + homework[mid-1])/2 : homework[mid]; 

// Compute and write the final grade 

    streamsize prec = cout.precision(); 
    cout << "Your final grade is :" << setprecision(3) << 0.2*midterm_grade + 0.4*final_grade + 0.4*median<< setprecision(prec) << endl; 
    return 0; 
    }// 

該程序編譯得很好,我可以輸入名稱和等級。但後來當我按下Ctrl + d(這是EOF從終端確認,還建議在這裏How to signal EOF of stdin when in mac osx terminal?)或Cmd的+ d(所建議也)。

當我按下Ctrl + D時,程序剛剛重新啓動。按Cmd + D,它有一些不尋常的行爲。它有時可能有效,有時它不起作用。我也嘗試查看Preferences-> Keymap,但是我找不到要設置的參數。

我想我在這裏錯過了一些真正基本的按鍵設置。 謝謝你的幫助。

+0

在按下Ctrl-D組合鍵之前,您是否在「run」窗口中輸入了輸出並且輸入了輸入內容?你是否按下了空行上的按鍵? –

+0

@Someprogrammerdude我已經做到了前面,但也是我繼續努力的組合。對於相同的組合,它有時會起作用,而其他時間則不起作用。以下是不同的情況:在下一行做,不起作用。做下一行,並「點擊運行窗口」不​​起作用。留下一個空白區域,然後在下一行進行也不起作用。 –

回答

1

顯然,在運行窗口中發送的只是「EOF」,然後每次運行程序都沒有任何問題。

-1

如果您使用的是Mac,則爲Command()+ D。如果您使用的是Windows,則爲Control(Ctrl)+ D。此外,如果您搜索「Clion Keymap」(Clion首選項/設置) - > Keymap - >搜索EOF和/或查看Keymap settings,您將看到默認設置。

+0

它不會爲我工作。用命令+ D,過程以某種方式退出。 – Tianqing

+0

EOF在MacOS是Ctrl + d,相同的Unix。 –

0

os x與clion有一個已知問題。在Find->行動,禁用run.process.with.pty,它應該如下工作:

你需要做的是按CMD + d在新的空行。在你的情況下,進入作業檔次,在未來的新的空行,按CMD + d。