0

検索で見つけた後、最大18行の映画情報(タイトル、年、ジャンル、品質、監督)を表示するコードを作成しようとしていますが、コンソールにコードを表示するのに問題があります。

関連する構造体:

struct Movie
        {
        public string title;
        public int year;
        public Name director;
        public float quality;
        public string mpaaRating;
        public string genre;
        public List<Name> cast;
        public List<string> quotes;
        public List<string> keywords;
        }
    struct MovieList
        {
        public int length;
        public Movie[] movie;
        }

問題のコードは以下のとおりです。

static void searchMovies(ref MovieList ML, int menuChoice)
{
Movie searchTerm;
float searchRating;
int searchIndex;
int foundIndex;
Movie[] foundMovie = new Movie[NUM_MOVIES];
do
{
int.TryParse(searchMenu(), out menuChoice);
foundIndex = 0;
Console.WriteLine("Enter the movie title to search for");
searchTerm.title = Console.ReadLine();
for (searchIndex = 0; searchIndex < ML.length; searchIndex++)
{
if (ML.movie[searchIndex].title == searchTerm.title)
{
foundMovie[foundIndex].title = ML.movie[searchIndex].title.ToUpper();
foundMovie[foundIndex].year = ML.movie[searchIndex].year;
foundMovie[foundIndex].genre = ML.movie[searchIndex].genre;
foundMovie[foundIndex].mpaaRating = ML.movie[searchIndex].mpaaRating;
foundMovie[foundIndex].director.firstName = ML.movie[searchIndex].director.firstName;
foundMovie[foundIndex].director.lastName = ML.movie[searchIndex].director.lastName;
foundIndex++;
}
}
Console.Clear();
displaySearchResults(foundMovie, foundIndex);
}

static void displaySearchResults(Movie[] foundMovie, int foundIndex)
        {
int displayedLines = 0;
int displayResults;
do
{
for (displayResults = 0; displayResults < foundMovie.Length; displayResults++)
{
Console.WriteLine("{0} {1} {2} {3}  {4} {5}",     foundMovie[displayResults].title,                                                               foundMovie[displayResults].year, foundMovie[displayResults].genre, 
 foundMovie[displayResults].mpaaRating, foundMovie[displayResults].director.firstName, foundMovie[displayResults].director.lastName);
displayedLines++;
}
Console.ReadLine();
} while (displayedLines < 18);
}

このコードは、ML.movi​​e [searchIndex] .titleをsearchTermにチェックし、見つかった場合は、タイトル、年、ジャンル、評価、および監督名(最初と最後)のML.movi​​e[searchIndex]値をにロードすることになっています。 foundIndexの現在の値でのfoundMovie構造体。次に、映画リスト全体を検索した後、displayメソッドに移動し、前述の値(タイトル、年、ジャンル、評価、および監督名)を含むコード行を印刷します。

コードを実行して検索プロセスを実行すると(ML構造体にはバイナリファイルからの映画がプリロードされます)、検索結果を表示するときに、写真に示すように、0の壁だけが表示されます。 。

実行時の出力例

4

1 に答える 1

0

displaySearchResults0との一致がない場合でも現在呼び出していfoundIndexます - 次に、設定されていない配列の最初の項目の表示に進みます。したがって、すべてのデフォルト値が表示されます - 空の文字列とゼロ (struct他の構造に次のように使用すると仮定)良い)。

2 つの提案:

  • 使用しclassないでくださいstruct- ここでははるかに適切と思われます。
  • 固定サイズのMovie配列を使用List<Movie>しないでください。一致する映画の数がわからないため、見つかった映画には a を使用してください。
于 2012-12-02T03:43:46.397 に答える