2010-04-06 5 views
2

J'ai ce programme, mais cin saute aléatoirement .. Je veux dire parfois, et parfois non. Une idée de comment réparer ça?C++ CIN saute aléatoirement

int main(){ 


     /** get course name, number of students, and assignment name **/ 
     string course_name; 
     int numb_students; 
     string assignment_name; 
     Assignment* assignment; 

     cout << "Enter the name of the course" << endl; 
     cin >> course_name; 

     cout << "Enter the number of students" << endl; 
     cin >> numb_students; 

     cout << "Enter the name of the assignment" << endl; 
     cin >> assignment_name; 

     assignment = new Assignment(assignment_name); 

     /** iterate asking for student name and score **/ 
     int i = 0; 
     string student_name; 
     double student_score = 0.0; 
     while(i < numb_students){ 

      cout << "Enter the name for student #" << i << endl; 
      cin >> student_name; 
      cout << "Enter the score for student #" << i << endl; 
      cin >> student_score; 
      assignment->addScore(Student(student_name, student_score)); 
      i++; 
     } 
} 

OK Je l'ai compris. Pour toute personne qui voudrait savoir voici le code mis à jour:

int main(){ 

    /** get course name, number of students, and assignment name **/ 
    string course_name; 
    int numb_students; 
    string assignment_name; 

    cout << "Enter the name of the course" << endl; 
    getline(cin, course_name); 

    cout << "Enter the number of students" << endl; 
    string temp; 
    getline(cin, temp); 
    numb_students = atoi(temp.c_str()); 

    cout << "Enter the name of the assignment" << endl; 
    getline(cin, assignment_name); 

    Assignment assignment(assignment_name); 

    /** iterate asking for student name and score **/ 
    int i = 0; 
    string student_name; 
    double student_score = 0.0; 
    while(i < numb_students){ 

     cout << "Enter the name for student #" << i+1 << endl; 
     getline(cin, student_name);  
     cout << "Enter the score for student #" << i+1 << endl; 
     getline(cin, temp); 
     student_score = atof(temp.c_str()); 
     assignment.addScore(Student(student_name, student_score)); 
     i++; 
    } 
+0

Que signifie «saute au hasard»? Peux-tu être plus précis? –

+3

roches 'numb_students': D – pajton

+0

numb_students: comment vrai ;-) – JRL

Répondre

5

Je suppose que certains de vos entrées ont des espaces en eux, que l'opérateur >> traite comme la fin d'un élément d'entrée particulière. L'opérateur iostreams >> n'est vraiment pas conçu pour les entrées interactives, en particulier pour les chaînes - vous devriez envisager d'utiliser getline() à la place.

En outre, vous utilisez inutilement l'allocation dynamique:

assignment = new Assignment(assignment_name); 

serait bien mieux écrire que:

Assignment assignment(assignment_name); 

vous devez éviter l'utilisation du 'nouveau' dans votre code chaque fois que possible, et Laissez plutôt le compilateur prendre soin des durées de vie des objets pour vous.

+0

Oui ma entrée a des espaces .... Je vais essayer d'obtenir la ligne merci – user69514