2016-12-02 1 views
2

J'ai récemment commencé à apprendre le C++ et j'ai suivi le livre Accelerated C++. Je suis sur le chapitre 3 et j'ai essayé d'exécuter le programme donné dans le livre. Je travaille sur CLion sur mon MAC OS. Le code est le suivant:Comment signaler EOF sur MAC OS X avec 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; 
    }// 

Le programme compile bien et je peux entrer le nom et aussi les catégories. Mais alors quand je presse Ctrl + D (qui est l'EOF confirmé à partir du terminal, également suggéré ici How to signal EOF of stdin when in mac osx terminal?) ou Cmd + D (comme suggéré aussi).

Lorsque j'appuie sur Ctrl + D, le programme redémarre. En appuyant sur Cmd + D, il a un comportement inhabituel. Il peut parfois fonctionner, et d'autres fois, il ne fonctionne pas. J'ai également essayé de regarder dans le Preferences-> Keymap mais je ne peux pas trouver quel paramètre mettre.

Je pense qu'il me manque des paramètres de touches vraiment basiques ici. Nous vous remercions de votre aide.

+0

Avez-vous cliqué dans la fenêtre "Exécuter", où la sortie est écrite et l'entrée est entrée, avant d'appuyer sur la combinaison "Ctrl-D"? Avez-vous appuyé sur les touches d'une ligne vide? –

+0

@Someprogrammerdude Je l'ai fait plus tôt aussi mais je continue d'essayer des combinaisons. Pour la même combinaison, cela fonctionne parfois, et d'autres fois non. Voici les différents cas: Faire sur la ligne suivante, ne fonctionne pas. Faire sur la ligne suivante, et "cliquant sur la fenêtre d'exécution" ne fonctionne pas. Laisser un espace vide et ensuite faire sur la ligne suivante ne fonctionne pas non plus. –

Répondre

1

Apparemment, ce qui fonctionnait envoyait juste "EOF" dans la fenêtre d'exécution, puis le programme fonctionnait à chaque fois sans problème.

-1

Si vous utilisez un Mac, il est commande (⌘ ) + D . Si vous utilisez Windows, il s'agit de Control (Ctrl) + D.

De même, si vous recherchez "Clion Keymap" (préférences/paramètres Clion) -> Keymap -> Rechercher EOF et/ou regarder Keymap settings, vous verrez les paramètres par défaut.

+0

ça ne marche pas pour moi. Avec commande + D, le processus sort en quelque sorte. – Tianqing

+0

EOF sur macOS est Ctrl + D, identique à Unix. –

0

Il existe un problème connu avec l'os x avec clion. dans Rechercher-> Action, désactivez run.process.with.pty, il devrait fonctionner comme ci-dessous:

Ce que vous devez faire est d'appuyer sur cmd + d dans une nouvelle ligne vide. Dans votre cas, entrez le grade du devoir, dans la nouvelle ligne vide suivante, appuyez sur cmd + d.