我正在编写一个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] = ' ';
}
}
}
编辑:添加了更多我的代码
答案 0 :(得分:1)
你弄错了Film[i] >= 'A' && Film[i <= 'Z']
。另外,您返回一个char数组,但您的函数定义是 char MaskFilm()。除了这两个错误,你的逻辑是正确的。第一个错误很明显,你可以纠正它,因为你已经正确地写了其他或条件。至于第二个错误,你还没有传递给函数,因此我假设你的 Mask [] 数组是全局的,所以在这种情况下make返回类型为void,不返回任何内容。在全局数组中选择一个电影名称电影[] (如你所做的那样)在main中,调用你的函数并在返回主打印之后你的蒙面数组。
的修改
@KOB我已经分享了你的代码的工作版本,主要是错误的
你如何使用strcpy。除此之外,我提到的变化很小
在代码评论中。看看Updated Code。我也是
不熟悉规则,但如果你发布代码至少要确保
它运行我必须删除一些东西,并在编译之前添加。如果您对代码有疑问,请在评论中发帖。