2010-04-06 5 views
2

У меня есть эта программа, но cin в случайном порядке пропускает. Я имею в виду, иногда это происходит, а иногда и нет. Любые идеи, как это исправить?CIN CIN cin случайно пропускает

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 Я понял. Для тех, кто что хотел бы знать, вот обновленный код:

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

Что означает «случайное пропуски»? Можете быть более конкретными? –

+3

'numb_students' rocks: D – pajton

+0

numb_students: как верно ;-) – JRL

ответ

5

Я бы предположил, что некоторые из ваших материалов имеют пробелы в них, которым >> оператор обрабатывает как конец определенного элемента ввода. Оператор iostreams >> действительно не предназначен для интерактивного ввода, особенно для строк. Вместо этого следует использовать getline().

Кроме того, вы без необходимости использования динамического распределения:

assignment = new Assignment(assignment_name); 

бы гораздо лучше записать так:

Assignment assignment(assignment_name); 

вы должны избегать использования «новых» в вашем коде, где это возможно, и вместо этого пусть компилятор позаботится о жизни объектов для вас.

+0

Да, у моего ввода есть пробелы .... Я попробую получить линию спасибо – user69514

Смежные вопросы