Программа работает до определенного момента, потом вылетает, появляется ошибка чтения символов строки - C (СИ)

Узнай цену своей работы

Формулировка задачи:

drug.h
Листинг программы
  1. #pragma once
  2. #include <iostream>
  3. using namespace std;
  4. class drug
  5. {
  6. protected:
  7. string name;
  8. int price;
  9. public:
  10. drug() {};
  11. drug(string cur_name, int cur_price);
  12. virtual void show();
  13. ~drug();
  14. };
drug.cpp
Листинг программы
  1. #include "drug.h"
  2. #include <iostream>
  3. #include <string.h>
  4. #include <string>
  5. using namespace std;
  6. drug::drug(string cur_name, int cur_price)
  7. {
  8. this->name = cur_name;
  9. this->price = cur_price;
  10. }
  11. void drug::show()
  12. {
  13. cout << "\n Medical drug:" << endl;
  14. cout << "Name: " << name << endl;
  15. cout << "Price: " << price << endl;
  16. }
  17. drug::~drug()
  18. {
  19. }
mixture.h
Листинг программы
  1. #pragma once
  2. #include "drug.h"
  3. class mixture :public drug
  4. {
  5. protected:
  6. int size;
  7. public:
  8. mixture() {};
  9. mixture(int cur_size, string name, int price) :drug(name, price)
  10. {
  11. this->size = cur_size;
  12. }
  13. void show();
  14. ~mixture() {};
  15. };
mixture.cpp
Листинг программы
  1. #include "mixture.h"
  2. #include "drug.h"
  3. #include <string>
  4. void mixture::show()
  5. {
  6. cout << "\nMedical drug: " << endl;
  7. cout << "Name: " << name << endl;
  8. cout << "Size(ml): " << size << endl;
  9. cout << "Price: " << price << endl;
  10. }
tablets.h
Листинг программы
  1. #pragma once
  2. #include "drug.h"
  3. class tablets :public drug
  4. {
  5. protected:
  6. int number;
  7. public:
  8. tablets() {};
  9. tablets(int cur_number, string name, int price) :drug(name, price)
  10. {
  11. this->number = cur_number;
  12. };
  13. void show();
  14. ~tablets();
  15. };
tablets.cpp
Листинг программы
  1. #include "tablets.h"
  2. #include "drug.h"
  3. #include <string>
  4. #include <iostream>
  5. using namespace std;
  6. tablets::~tablets()
  7. {};
  8. void tablets::show()
  9. {
  10. cout << "\nMedical drug:" << endl;
  11. cout << "Name: " << name << endl;
  12. cout << "Number: " << number << endl;
  13. cout << "Price: " << price << endl;
  14. }
main.cpp
Листинг программы
  1. #include <iostream>
  2. #include <conio.h>
  3. #include <math.h>
  4. using namespace std;
  5. void main()
  6. {
  7. setlocale(LC_ALL, "rus");
  8. double x[3], y[3],X[3];
  9. double L = 1,L_1=0;
  10.  
  11. cout<<"Введите значение х(i):"<<endl;
  12. for (int i = 0; i < 4; i++)
  13. {
  14. cout << "x" <<i<< ":";
  15. cin >> x[i];
  16. }
  17. cout<<"Введите значение y(i):"<<endl;
  18. for (int i = 0; i < 4; i++)
  19. {
  20. cout << "y" << i << ":";
  21. cin >> y[i];
  22. }
  23. cout<<"\nВведите значение точек:"<<endl;
  24. for (int i = 0; i < 4; i++)
  25. {
  26. cout << "X" << i << ":";
  27. cin >> X[i];
  28. }
  29. for (int k = 0; k < 4; k++)
  30. {
  31. L_1 = 0;
  32. for (int i = 0; i <4; i++)
  33. {
  34. L = 1;
  35. for (int j = 0; j <4; j++)
  36. if (i != j)
  37. L = L*((X[k]- x[j]) / (x[i] - x[j]));
  38. L_1 = L_1 + L*y[i];
  39. }
  40. cout<<"Y["<<X[k]<<"]="<<L_1<<" "<<endl;
  41. }
  42. system("pause");
  43. _getch;
  44. }
вот main.cpp
Листинг программы
  1. #include "drug.h"
  2. #include "mixture.h"
  3. #include "tablets.h"
  4. #include <iostream>
  5. #include <conio.h>
  6. #include <string>
  7. using namespace std;
  8. void input(string *name, int *price)
  9. {
  10. cout << "Name: ";
  11. cin >> *name;
  12. cout << "Price: ";
  13. cin >> *price;
  14. }
  15. void objects(drug *obj[], int n)
  16. {
  17. string name;
  18. int price, number, size, a;
  19. for (int i = 0; i < n; i++)
  20. {
  21. cout << "Do you want input data of tablets-1, or mixture-2: ";
  22. cin >> a;
  23. switch (a)
  24. {
  25. case 1:
  26. {
  27. input(&name, &price);
  28. cout << "Number: ";
  29. cin >> number;
  30. obj[i] = new tablets(number, name, price);
  31. break;
  32. }
  33. case 2:
  34. {
  35. input(&name, &price);
  36. cout << "Size: ";
  37. cin >> size;
  38. obj[i] = new mixture(size, name, price);
  39. break;
  40. }
  41. }
  42. }
  43. for (int i = 0; i < n; i++)
  44. delete obj[i];
  45. }
  46. void main(int argc, const char * argv[])
  47. {
  48. const int n = 2;
  49. drug *obj[n];
  50. objects(obj, n);
  51. for (int i = 0; i < n; i++)
  52. obj[i]->show();
  53. _getch();
  54. }

Решение задачи: «Программа работает до определенного момента, потом вылетает, появляется ошибка чтения символов строки»

textual
Листинг программы
  1. void main(int argc, const char * argv[])
  2. {
  3.     const int n = 2;
  4.     drug *obj[n];
  5.     objects(obj, n);
  6.     for (int i = 0; i < n; i++)
  7.         obj[i]->show();
  8.     for (int i = 0; i < n; i++)
  9.         delete obj[i];
  10.     _getch();
  11. }

Объяснение кода листинга программы

  1. В функции main() объявлены две переменные: n и obj.
  2. Переменная n объявлена как константа и ей присваивается значение 2.
  3. Переменная obj объявлена как указатель на массив объектов типа drug, размер которого равен переменной n.
  4. Функция objects() инициализирует объекты в массиве obj.
  5. В цикле for происходит вызов метода show() для каждого объекта в массиве obj.
  6. В цикле for происходит вызов деструктора для каждого объекта в массиве obj.
  7. Вызов функции _getch() предназначен для обработки нажатий клавиш.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 3.846 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы