2015-09-14 5 views
4

У меня проблема с языком программирования C++, пожалуйста, помогите мне. Я пишу программу, которая просит пользователя ввести идентификатор студента, и программа будет извлекать информацию о студенте, у которого есть этот идентификатор из списка из 15 учеников в моем .txt-файле. У меня есть эти строки кодов:Как спрятать функцию в C++

void Person_list::changeName() 
    { 
     Person *s; 
     string name; 
     int id; 
     int temp_id; 
     s = head; 
     cout << "Please enter student's ID: "; 
     cin >> id; 
     while ((s!=NULL) && (s -> getID() != id)) 
     { 
      s = s -> next; 
     } 
     if (s != NULL) 
     { 
      s -> Show(); 
     } 
     if (s == NULL) 
     { 
     cout << "Cant find" << endl; 
     } 
    } 

То, что я хочу сделать, это попросить пользователя ввести студентов ID снова (до тех пор, пока пользователь не введет соответствующий номер), если программа не может найти студента ID (например, когда я вхожу в 16, программа не может найти ученика, потому что в моем списке всего 15 учеников). есть идеи как это сделать? Благодарю.

P/s Я не разрешено использовать nullptr

+4

Я предлагаю разделить ваши функции и есть метод 'Person * FindById (интермедиат ID); 'и удалить неиспользуемые переменные. – Jarod42

+2

a 'do {/ ** /} while (s == nullptr);' может выполнять задание. – Jarod42

+0

Вы не можете использовать 'nullptr'. Можете ли вы использовать 'NULL'? Это два имени для одного и того же. – Beta

ответ

3

Вы можете использовать что-то вроде:

Person* Person_list::FindById(int id) 
{ 
    for (Person* s = head; s != nullptr; s = s->next) { 
     if (s->getID() == id) { 
      return s; 
     } 
    } 
    return nullptr; 
} 

void Person_list::changeName() 
{ 
    Person* s = nullptr; 
    do { 
     std::cout << "Please enter student's ID: "; 
     int id; 
     std::cin >> id; 
     s = FindById(id); 
     if (s == nullptr) { 
      std::cout << "Cant find" << std::endl; 
     } 
    } while (s == nullptr); 
    s->Show(); 
} 
+0

профессор не позволяет мне использовать nullptr, к сожалению. Любой другой парень? спасибо – Marco

+0

Если вы не можете использовать 'nullptr', просто сравните указатели с' 0'. По определению указатель со значением 0 является нулевым указателем. – Peter

+0

спасибо человеку! оно работает! очень ценю! – Marco