使用C ++初学者。
我正在学习数据结构,无法弄清楚如何指向循环内的函数。 e.g。
struct book
{
string author;
string title;
int publicationYear;
};
void setBook(book&);
int main()
{
book bookInfo[3];
setBook(bookInfo);
return 0;
}
void setBook(book &bookToSet)
{
for(int i = 0; i < 3; i++)
{
cout << "Who is the author of the book: ";
cin >> bookToSet[i].author;
cout << "What is the title of the book: ";
cin >> bookToSet[i].title;
cout << "In what year was the book published: ";
cin >> bookToSet[i].publicationYear;
}
}
这不起作用,我不知道为什么。
在函数循环中我也尝试编写(bookToSet + 1).author
(以引用地址),但它也没有用。
我在指针和地址方面苦苦挣扎。
编辑:
我试图创建函数(类似于setBooks)来打印标题,作者和publicationYear,但它不会编译。错误在哪里?
void printBooks(book bookToPrint, int cout)
{
for(int i = 0; i < cout; i++)
{
cout << bookToPrint[i].title << " " << bookToPrint[i].author << " " << bookToPrint[i].publicationYear << endl;
}
}
答案 0 :(得分:1)
你的函数setBook
接受对一本书的引用,但你传给它一个指针。这是因为你创建了一个包含3本书的数组。
您的函数setbook
使您看起来像是在使用它来设置一本书(否则您应该将其称为setBooks
。它应该如下所示:
struct book
{
string author;
string title;
int publicationYear;
};
void setBook(book&);
int main()
{
book bookInfo[3];
for(int i = 0; i < 3; i++)
{
setBook(bookInfo[i]);
}
return 0;
}
void setBook(book &bookToSet)
{
cout << "Who is the author of the book: ";
cin >> bookToSet.author;
cout << "What is the title of the book: ";
cin >> bookToSet.title;
cout << "In what year was the book published: ";
cin >> bookToSet.publicationYear;
}
或者
struct book
{
string author;
string title;
int publicationYear;
};
void setBooks(book *, int);
int main()
{
book bookInfo[3];
setBooks(bookInfo ,3);
return 0;
}
void setBooks(book *booksToSet, int count)
{
for (int i = 0; i != count; ++i)
{
cout << "Who is the author of the book: ";
cin >> booksToSet[i].author;
cout << "What is the title of the book: ";
cin >> booksToSet[i].title;
cout << "In what year was the book published: ";
cin >> booksToSet[i].publicationYear;
}
}
答案 1 :(得分:0)
您将指针和引用混淆了。它们是两个不同的东西,虽然有很多问题可以解决,但它们的工作方式却截然不同。我不会详细解释差异以及何时使用,因为已经有很多关于这个主题的文档(例如,看看this所以问题)。
为了让您开始解决您发布的特定问题,@ Lanting的回答非常好。