Невозможно объявить массив строк как член класса вместо char (C ++) - PullRequest
0 голосов
/ 16 июня 2020

Я хочу добавить массив заголовков для 10 книг, чтобы пользователь мог добавлять / вводить «строковое значение» для каждого заголовка, который может содержать более одного слова. Я попытался заменить "char" на "string", но при запуске программы он работает некорректно!

#include <iostream>
using namespace std;
class Book {
  int year;
  char Title[10];  // the problem with in here
  int bookno;
  int copyno;
  int price;

 public:
  void Creatdata()  // Statement 1 : Defining Creatdata()
  {
    cout << "\n\tEnter Book published year : ";
    cin >> year;

    cout << "\n\tEnter Book title : ";
    cin >> Title;

    cout << "\n\tEnter Book number: ";
    cin >> bookno;
    cout << "\n\tEnter Copy number: ";
    cin >> copyno;

    cout << "\n\tEnter Employee Salary : ";
    cin >> price;
  }

  void DisplayData()  // Statement 2 : Defining DisplayData()
  {
    cout << "\n" << year << "\t" << Title << "\t" << bookno << "\t" << copyno
         << "\t" << price;
  }
};

int main() {
  int i;

  Book B[10];  // Statement 3 : Creating Array of 10 books

  for (i = 0; i <= 10; i++) {
    cout << "\nEnter details of " << i + 1 << " Book";
    B[i].Creatdata();
  }

  cout << "\nDetails of Book";
  for (i = 0; i <= 10; i++)
    B[i].DisplayData();
  return 0;
}

1 Ответ

0 голосов
/ 16 июня 2020

Вы должны использовать std::string и std::getline:

class Book {
  int year;
  std::string title;
  int bookno;
  int copyno;
  int price;

 public:
  void Creatdata()  // Statement 1 : Defining Creatdata()
  {
    cout << "\n\tEnter Book published year : ";
    cin >> year;

    cout << "\n\tEnter Book title : ";
    std::getline(std::cin, title);

    cout << "\n\tEnter Book number: ";
    cin >> bookno;
    cout << "\n\tEnter Copy number: ";
    cin >> copyno;

    cout << "\n\tEnter Employee Salary : ";
    cin >> price;
  }
};

std::getline() будет читать текст до тех пор, пока не будет найден новая строка .
operator>> будет пропускать пробелы, затем читать текст, пока не будет найден пробел (обычно одно текстовое слово).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...