我正在制作一个包含Movie类的程序,其中包含title,criticRating和audienceRating。我有一个静态数组,我正在创建一个名为PrintMovies的函数,它将电影数组打印成一个漂亮的表。除了数组中的第一个元素之外,我无法访问其他元素以打印到表格中。
非常感谢任何帮助!
这是我到目前为止所做的:
#include <iostream>
#include <string>
#include <iomanip>
using std::cout;
using std::endl;
using std::string;
using std::setw;
struct Movie {
std::string title;
int criticRating; // from 0 to 100
int audienceRating; // from 0 to 100
Movie(string t, int c, int a) {
title = t;
criticRating = c;
audienceRating = a;
}
Movie() { // Default constructor
title = "DEFAULT TITLE";
criticRating = 0;
audienceRating = 0;
}
};
void PrintMovies(Movie* movies, int numMovies) {
cout << "Movies" << endl;
cout << "Critic Audience Title" << endl;
for (int i = 0; i < numMovies; i++) {
cout << setw(6) << (movies->criticRating) << setw(12) << (movies->audienceRating) << " " << (movies->title) << endl;
}
}
int main() {
Movie TenMovies[10] = { Movie("Star Wars: Episode VII - The Force Awakens",92,90),
Movie("Deadpool",83,95), Movie("Donnie Darko",85,80),
Movie("2001: A Space Odyssey",96,89), Movie("Spaceballs",54,83),
Movie("The Matrix",87,85), Movie("Inception",86,91),
Movie("The Martian",92,92), Movie("Toy Story",100,92),
Movie("Monty Python and the Holy Grail",97,95) };
PrintMovies(TenMovies, 10);
}
答案 0 :(得分:0)
要访问对象“电影”数组的第ii项中的“criticRating”字段,请使用以下语法:
movies[i].criticRating
答案 1 :(得分:0)
cout << setw(6) << ((*(movies + i)).criticRating) << setw(12) << ((*(movies + i)).audienceRating) << " " << ((*(movies + i)).title) << endl;**You are using array for not travesring with array of Movies use this syntax**
答案 2 :(得分:0)
考虑这个的最佳方式就像是一个c风格的字符串。
如果你想打印一个角色,你会做这样的事情 -
char *myStr = "Hello world!";
std::cout << myStr[1] << std::endl;
你猜对了,打印'e',因为'e'的索引是1。
如果您这样说(注意取消引用*) -
,会发生什么 std::cout << *myStr << std::endl;
那将打印'H'。那是因为H位于数组的开头,每当你创建一个新数组时,该数组/指针的地址都是第一个元素。
检查出来 -
0x4050e0 H
0x4050e1 e
0x4050e2 l
0x4050e3 l
0x4050e4 o
0x4050e5
0x4050e6 w
0x4050e7 o
0x4050e8 r
0x4050e9 l
0x4050ea d
0x4050eb !
0x4050ec
这是字符串在不同地址的内存中的样子。
myStr的地址位于0x4050e0,与H相同!如果你要说myStr ++将地址移动到e或0x4050e1。 示例 -
char *myStr = "Hello world!";
myStr++;
std::cout << myStr << std::endl;
那将打印“ello world!”而不是“Hello world!”,因为我们增加了指针。指针指向内存中的位置(或地址),因此增加一个会移动到下一个地址。
话虽如此,有多种方法可以做到这一点。
一个是使用你的i循环变量作为数组索引访问c风格字符串中的单个字符:
for (int i = 0; i < numMovies; i++) {
cout << setw(6) << (movies[i].criticRating) << setw(12) << (movies[i].audienceRating) << " " << (movies[i].title) << endl;
}
否则你可以这样做,它可以让你看到为什么指针被称为指针:
for (int i = 0; i < numMovies; i++) {
cout << setw(6) << (movies->criticRating) << setw(12) << (movies->audienceRating) << " " << (movies->title) << endl;
//Increment movies' address to the next Movie in memory.
movies++;
}