将数组打印为星号,就像显示它正在隐藏另一个数组一样

时间:2015-03-04 21:48:01

标签: arrays

我正在编写一个C程序,用户必须从50个电影片名的文件中猜出随机生成的电影的名称。我需要在星号中打印随机电影标题,但我正在努力这样做。例如,如果电影是" Django Unchained",那么" ****** *********"将会显示。

我有两个50个字符的数组:电影[50],其中包含随机生成的电影和Mask [50]的标题,我打算用它来保存电影的蒙面标题。这是我用来掩盖标题的函数,但是当我打印Mask [50]时没有打印任何内容。

非常感谢任何帮助。

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <string.h>

char FilmArray[50][100];
char Film[50], Mask[50];
int r, i=0;

bool PlayAgain();
void GenerateFilm();
void MaskFilm();

int main()
{
char array[50];

bool answer;

FILE *films;
films = fopen("filmtitles.txt", "r");

if(films == NULL){
    printf("\n ************* ERROR *************\n");
    printf("\n \"filmtitles.txt\" cannot be opened.\n");
    printf("\n         PROGRAM TERMINATED\n");
    exit(EXIT_FAILURE);
}

while(fgets(array, sizeof array, films) != NULL){
    strcpy(&FilmArray[i], array);
    i++;
}

printf("\n ************ WELCOME TO MY FILM GENIE GAME ************\n\n");

do{
printf(" Hit ENTER to generate a random film!\n");
getch();

GenerateFilm();

printf("\n %s\n", &Film[50]);

MaskFilm();

printf("\n %s\n", &Mask[50]);

.........
.........

return 0;
}

void GenerateFilm(){
srand(time(NULL));
r = rand() % 49;
strcpy(&Film[50], &FilmArray[r][0]);
}

void MaskFilm(){
for(i=0; i<50; i++){
    if((Film[i] >= 'a' && Film[i] <= 'z') || (Film[i] >= 'A' && Film[i] <= 'Z') || (Film[i] >= '0' && Film[i] <= '9')){
        Mask[i] = '*';
    }
    else if(Film[i] == '.'){
        Mask[i] = '.';
    }
    else{
        Mask[i] = ' ';
    }
}

}

编辑:添加了更多我的代码

1 个答案:

答案 0 :(得分:1)

你弄错了Film[i] >= 'A' && Film[i <= 'Z']。另外,您返回一个char数组,但您的函数定义是 char MaskFilm()。除了这两个错误,你的逻辑是正确的。第一个错误很明显,你可以纠正它,因为你已经正确地写了其他或条件。至于第二个错误,你还没有传递给函数,因此我假设你的 Mask [] 数组是全局的,所以在这种情况下make返回类型为void,不返回任何内容。在全局数组中选择一个电影名称电影[] (如你所做的那样)在main中,调用你的函数并在返回主打印之后你的蒙面数组。

修改

@KOB我已经分享了你的代码的工作版本,主要是错误的 你如何使用strcpy。除此之外,我提到的变化很小 在代码评论中。看看Updated Code。我也是 不熟悉规则,但如果你发布代码至少要确保 它运行我必须删除一些东西,并在编译之前添加。如果您对代码有疑问,请在评论中发帖。