Цикл C ++ приложений

У меня есть консольное приложение, и я сначала генерирую 10 студентов, а затем добавляю их в Evidence (собственный двойной связанный список). Затем я удаляю студента из Evidence, но после второго (или более высокого) удаления студента у меня бесконечный цикл, потому что cin >> id; не ждет моей реакции Где проблема, пожалуйста? Спасибо за все советы и извините от моего плохого английского. 🙂

#include "stdafx.h"#include <stdlib.h>
#include <iostream>
#include "EvidenceStudent.h"using namespace std;

int main(int argc, char ** argv[])
{
EvidenceStudent * evidence = new EvidenceStudent();
int number;
while(1){
<< "[1] Generate 10 students" << std::endl
<< "[2] Remove student" << std::endl
<< "[3] Write all students" << std::endl
<< "Number: ";
std::cin >> number;
cin.ignore();
switch(number){
case 1 : {
Student * s0 = new Student("st00000", "Karel", "Gott");
Student * s1 = new Student("st11111", "Marek", "Prima");
Student * s2 = new Student("st22222", "Alois", "Jirasek");
Student * s3 = new Student("st33333", "Josef", "Rehak");
Student * s4 = new Student("st44444", "Zdenek", "Zlatnik");
Student * s5 = new Student("st55555", "Monika", "Svobodova");
Student * s6 = new Student("st66666", "Michal", "Cvik");
Student * s7 = new Student("st77777", "Jiri", "Sadilek");
Student * s8 = new Student("st88888", "Tomas", "Svoboda");
Student * s9 = new Student("st99999", "Vojtech", "Hudec");

evidence->AddStudent(*s0, Student::FIRST);
evidence->AddStudent(*s1, Student::LAST);
evidence->AddStudent(*s2, Student::NEXT);
evidence->AddStudent(*s3, Student::PREVIOUS);
evidence->AddStudent(*s4);
evidence->AddStudent(*s5, Student::FIRST);
evidence->AddStudent(*s6, Student::LAST);
evidence->AddStudent(*s7, Student::NEXT);
evidence->AddStudent(*s8, Student::PREVIOUS);
evidence->AddStudent(*s9);
break;
}
case 2 : {
string id;
cout << "Enter student ID: ";
cin >> id;       //<-- after entering second id - infinite cycle
cin.ignore();
evidence->RemoveStudent(id);
break;
}
case 3 : evidence->WriteAllStudents(); break;
default : cout << "Bad number." << endl; break;
}
}
return 0;
}

0

Решение

Смотрите операцию оператора >> istream: http://www.cplusplus.com/reference/istream/istream/operator%3E%3E/

Вероятно, у вас установлен бит сбоя на cin из-за неудачного преобразования в int, и после этого последующие вызовы

std::cin >> number;

потерпит неудачу, в результате чего ваша программа никогда не получит входные данные от std :: cin и попадет в бесконечный цикл.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector