[英]C++ Array structure
我用c ++制作了一本書存儲程序。 它是循環3次以上的程序,因此用戶可以輸入3本書但是現在我希望用戶選擇用戶想要輸入的書的數量,我不知道如何去做。 這將是有幫助的,這是我的代碼
#include <iostream>
#include <string>
#include <sstream>
using namespace std;
struct Book{
string name;
int release;
}Issue[3];
int main(){
//local variable
int i;
string release_dte;
//interface
cout << "Welcome to Book Storage CPP" << endl;
//for handler
for (i = 0; i < 3; i++){
cout << "Book: ";
getline(cin, Issue[i].name);
cout << "Release Date: ";
getline(cin, release_dte);
Issue[i].release = atoi(release_dte.c);
}
cout << "These are your books" << endl;
for ( i = 0; i < 3; i++){
cout << "Book: " << Issue[i].name << " Release Date: " << Issue[i].release << endl;
}
system("pause");
return 0;
}
最好的方法是使用std :: vector。 例如
#include <vector>
//...
struct Book{
string name;
int release;
};
int main()
{
size_t issue_number;
std::cout << "Enter number of books: ";
std::cin >> issue_number;
std::vector<Book> Issue( issue_number );
//...
否則,您應該自己動態分配數組。 例如
Book *Issue = new Book[issue_number];
在程序結束時,您需要釋放分配的內存
delete []Issue;
擴展(並批評)弗拉德的回答,如果你使用流迭代器,你將不需要事先預定數量。 您還可以重載Book
的流提取器,以便迭代器正確實現提取:
std::istream& operator>>(std::istream& is, Book & b)
{
if (!is.good())
return is;
std::string release_date;
if (std::getline(is >> std::ws, b.name) &&
std::getline(is >> std::ws, release_date))
{
b.release = std::stoi(release_date);
}
return is;
}
稍后在main()
你仍然會使用std::vector<Book>
,只使用構造函數的迭代器重載來生成對象:
int main()
{
std::vector<Book> Items(std::istream_iterator<Book>{std::cin},
std::istream_iterator<Book>{});
...
}
對於打印,您可以使插入器過載,從而實現打印邏輯:
std::ostream& operator<<(std::ostream& os, const Book & b)
{
return os << "Book: " << b.name << '\n'
<< " Release Date: " << b.release;
}
並使用std::copy
調用此插入器:
std::copy(Items.begin(), Items.end(),
std::ostream_iterator<Book>(std::cout << "These are your books: \n", "\n"));
#include <iostream>
#include <string>
#include <vector>
using namespace std;
struct Book {
string name;
int release;
Book(string _name, int _release) {
name = _name;
release = _release;
}
};
int main() {
vector<Book> books;
string name;
int release;
while(cin >> name >> release) {
books.push_back(Book(name,release));
}
for(int i=0; i<(int)books.size(); ++i) {
cout << books[i].name << " - " << books[i].release << endl;
}
return 0;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.