Вниз  C / C++
- 19.05.2014 / 20:57
Pauk52
  Пользователь

Pauk52 
Сейчас: Offline
делаю лабу с использованием структур и накнулся на проблему удаления елементов из vector, способом котрым я удаляю элемент а пыхает туда мусор
 
  1. #include <iostream>
  2. #include <string>
  3. #include <vector>
  4. #include <iterator>
  5. #include <algorithm>
  6. #include <stdlib.h>
  7. using namespace std;
  8.  
  9. int count=0;
  10.  
  11. struct student{
  12.     string name;
  13.     int firstMark;
  14.     int secondMark;
  15.     int thirdMark;
  16. };
  17.  
  18. student get_student(){
  19.     string buffer;
  20.     int buff;
  21.     student studentBase;
  22.  
  23.     cout << "Enter student name\n";
  24.     cin >> buffer;
  25. studentBase.name = buffer;
  26.     cout << "Enter student first mark\n";
  27.     cin >> buff;
  28. studentBase.firstMark = buff;
  29.     cout << "Enter student second mark\n";
  30.     cin >> buffer;
  31. studentBase.secondMark = buff;
  32.     cout << "Enter student third mark\n";
  33.     cin >> buffer;
  34. studentBase.thirdMark = buff;
  35. return studentBase;
  36. }
  37.  
  38. void showStudent(int id, const vector<student> & base){
  39.     cout << "Student name is " << base[id].name << '\n';
  40.     cout << "mark 1 " << base[id].firstMark << '\n';
  41.     cout << "mark 2 " << base[id].secondMark << '\n';
  42.     cout << "mark 3 " << base[id].thirdMark << "\n\n";
  43. }
  44. int main(int argc, char **argv){
  45.     vector<student> studentBase;
  46.     int chose;
  47.     bool contin = true;
  48.     while(contin){
  49.         cout << "***Welcome in Student DataBase***\n";
  50.         cout << "Please chose what you want\n";
  51.         cout <<"1.Add Student\n";
  52.         cout <<"2.Show Student\n";
  53.         cout <<"3.delete Student\n";
  54.         cout <<"4.Exit\n";
  55.         cin >> chose;
  56.         switch(chose){
  57.             case 1:
  58.                 studentBase.push_back(get_student());
  59.                 break;
  60.             case 2:
  61.                 int sid;
  62.                 cin >> sid;
  63.                 showStudent(sid,studentBase);
  64.                 break;
  65.             case 3:
  66.                 int idx;
  67.                 cin >> idx;
  68.                 studentBase.erase(studentBase.begin() + idx);
  69.                 break;
  70.         }
  71.  
  72.     }
  73.     return 0;
  74. }
вывод:
  1. [vova@lenovo struct]$ ./main
  2. ***Welcome in Student DataBase***
  3. Please chose what you want
  4. 1.Add Student
  5. 2.Show Student
  6. 3.delete Student
  7. 4.Exit
  8. 1
  9. Enter student name
  10. qw
  11. Enter student first mark
  12. 1
  13. Enter student second mark
  14. 2
  15. Enter student third mark
  16. 3
  17. ***Welcome in Student DataBase***
  18. Please chose what you want
  19. 1.Add Student
  20. 2.Show Student
  21. 3.delete Student
  22. 4.Exit
  23. 3
  24. 0
  25. ***Welcome in Student DataBase***
  26. Please chose what you want
  27. 1.Add Student
  28. 2.Show Student
  29. 3.delete Student
  30. 4.Exit
  31. 2
  32. 0
  33. Student name is qw,�G    �

- 23.05.2014 / 12:40
dzanis
  Пользователь

dzanis 
Сейчас: Offline
Выход за пределы ведь.В примере то удален весь список.
Проверь так
[code] [/code]try
{
...
   
... cout << "Student name is " << base.at(id).name << '\n';
}
catch (std::out_of_range& oor)
{
           cout << "error : out ofrange id " <<id<< '\n';
}
- 26.05.2014 / 19:20
Gaucer
  Пользователь

Gaucer 
Сейчас: Offline
привет. пишу вот прогу,но она после ввода первых данных закрывается. пишу в Qt Creator

  1. #include <iostream>
  2. #include <stdio.h>
  3. #include <string.h>
  4. using namespace std;
  5.  
  6. class mainer {
  7. public:
  8.  
  9.    struct _man {
  10.        char name[200], city[70], street[100], num[12], pre[5];
  11.    }Man;
  12. struct _man *m;
  13. mainer() {
  14.     cout << "Please enter smth";
  15. }
  16. };
  17.  
  18. class city:public mainer {
  19. public:
  20.     city() {
  21.         cout << endl << "Enter City: ";
  22.         cin >> m->city;
  23.     }
  24. };
  25.  
  26. class name:public mainer {
  27. public:
  28.     name() {
  29.         cout << endl << "Enter Name: ";
  30.         cin >> m->name;
  31.     }
  32. };
  33.  
  34. class street:public mainer {
  35. public:
  36.     street() {
  37.         cout << endl << "Enter Street: ";
  38.         cin >> m->street;
  39.         }
  40.  };
  41.  
  42. class num:public mainer {
  43. public:
  44.     num() {
  45.         cout << endl << "Enter Prefix and Number: ";
  46.         cin >> m->pre >> m->num;
  47.     }
  48. };
  49.  
  50. class Book:public name, city, street, num {
  51. };
  52.  
  53.  
  54. int main() {
  55. Book user;
  56. return 0;
  57. }

- 26.05.2014 / 22:08
dzanis
  Пользователь

dzanis 
Сейчас: Offline
Gaucer, а потому что тут ничего не вызывает
  1. int main() {
  2. Book user;
  3. return 0;
  4. }

- 26.05.2014 / 22:22
Gaucer
  Пользователь

Gaucer 
Сейчас: Offline
dzanis, а что вызвать-то? стоит конструктор же..
- 26.05.2014 / 22:43
Ксакеп
  Модератор форума

Ксакеп 
Сейчас: Offline
Всё гуд, ребят, но кидайте в спойлеры ([spoiler][/..]) длинный код, пожалуйста.

Изменено Ксакеп (26.05 / 22:44) (всего 1 раз)
- 27.05.2014 / 01:38
dzanis
  Пользователь

dzanis 
Сейчас: Offline
Gaucer, Ну так чему там работать? Поле user не юзается,конструкторы разрушаются пока вводишь первый вопрос.QT не стабильный ващето.Напиши всем класам поля,и ваше так не программируй никогда - класс создавать для одного вопроса.Слишком классов много,хватит и одной структуры book.Отправь вопрос в спец метод который вернет ответ,типа book user; user.name = get("Enter name") и т.д
- 3.06.2014 / 19:30
Gaucer
  Пользователь

Gaucer 
Сейчас: Offline
и снова я
Открыть спойлер

программа не выводит данные через функцию print(). Perror() возвращает succes. Выводил данные сразу после ввода, всё норм
- 4.06.2014 / 10:51
dzanis
  Пользователь

dzanis 
Сейчас: Offline
Невижу чтоб у тебя консоль останавливалась.Может так принято на qt,но на сях консоль сразу закрывается и увидеть что там пишется просто неуспеть.А так я больше невижу косякав в коде,все таки я бы не юзал qt для таких простых вешей,в которых не нужны плотные циклы вычеслений.
- 4.06.2014 / 14:35
Gaucer
  Пользователь

Gaucer 
Сейчас: Offline
dzanis, не, он просит нажать Ввод, чтоб выйти. Но последнюю строчку не выводит
Наверх  Всего сообщений: 2777
Фильтровать сообщения
Поиск по теме
Файлы топика (111)