数组返回有趣的movie_check()

时间:2014-02-13 16:06:01

标签: c++ arrays function return

现在帮助我。告诉我我哪里错了。我正在做一个简单的电影猜谜游戏。

使用check_movie()我试图在每次猜测后从其临时数组更新电影。

我收到以下错误:char*char[100]的分配不兼容 它与check_movie()的某些东西我哪里错了?

我试图第一次从任何函数返回一个数组。我只是个初学者。我搜索了很多关于返回阵列的信息,但这些例子都不在我脑海里。

#include<iostream.h>
#include<stdlib.h>
#include<ctype.h>
#include<string.h>
#include<conio.h>

void display_movie(char movie_temp[], int);
void display_life(int);
int win_player2(char movie_temp[]);
int check_life(char movie[], char, int);
char *check_movie(char movie[], char movie_temp[], char ch); //not sure about this func.

char *check_movie(char movie[], char movie_temp[], char ch)
{
    for(int i=0 ; movie[i]!='\0' ; i++)
    {
        if(movie[i]==ch)
        movie_temp[i]=movie[i];
    }

    return movie_temp;
}

void display_movie(char movie_temp[], int len)
{
    for(int i=0 ; i<len ; i++)
    cout<<movie_temp[i];
}

void display_life(int life)
{
    for(int i=0 ; i<=life ; i++)
       cout<<"\3";
}


int check_life(char movie[], char ch, int life) 
{
    int count1=0;
    for(int i=0 ; movie[i]!='\0' ; i++)
    {
        if(movie[i]==ch)
           count1++;
    }
    if(count1==0)
       return --life;
    else
       return life;
}

int win_player2(char movie_temp[])
{
    int count=0;
    for(int i=0 ; movie_temp[i]!='\0' ; i++)
    {
        if(movie_temp[i]=='_')
          count++;
    }
    if(count==0)
       return 0;
    else
       return 1;
}


int main()
{
    char movie[100], movie_temp[100], ch;
    cout<<"Enter the movie: ";
    cin.getline(movie,100);
    int len= strlen(movie);
    system("cls");


    for(int i=0 ; movie[i]!='\0' ; i++)
    {
        if(movie[i]=='a' || movie[i]=='e' || movie[i]=='i' || movie[i]=='o' || 
           movie[i]=='u' || movie[i]==' ')
              movie_temp[i]= movie[i];
    else
        movie_temp[i]='_';
    }

    int life=9;
    cout<<"\nLives left: ";
    display_life(life);


    while(life!=0 || win_player2(movie_temp)!=0)
    {
        cout<<"\n";
        display_movie(movie_temp, len);
        cout<<"\nEnter your guess: ";
        cin>>ch;
        life=check_life(movie, ch, life); //Here I update life
        //Updates life after every guess.

        movie_temp=check_movie(movie, movie_temp, ch);
        /*This part is getting me errors. I am trying to update movie_temp after every         
          guess.*/          


        cout<<"\n\nLives left: ";
        display_life(life);

   }
   getch();
   return 0;
}

2 个答案:

答案 0 :(得分:1)

不要从电影检查中返回任何内容。只需更新函数中的temp_array即可。数组不按值传递。见Why can't we pass arrays to function by value?

答案 1 :(得分:1)

查看名为 movie_temp

的变量
char movie_temp[100]
// ...
movie_temp=check_movie(movie, movie_temp, ch);

数组可以被认为是硬编码的内存地址。所以这将与以下代码类似....

5 = this_function_returns_an_int();

这显然是错误的。您不能分配常量。如果你希望你的内存地址是一个可赋值变量,你需要一个指针,而不是一个数组。

如果我建议,请为check_movie执行类似的操作。

// Updates movie_temp[] with characters from movie[] matching ch.  Wheel Of Fortune style.
// return true if any characters matched ch.  return false otherwise.
bool check_movie(char movie[], char movie_temp[], char ch);