gpt4 book ai didi

c - 调用使用 "for"循环填充全局结构数据的函数时出现运行时错误

转载 作者:行者123 更新时间:2023-11-30 19:33:54 26 4
gpt4 key购买 nike

我是编程新手,一直在尝试使用函数。因此,我决定制作一个简单的程序来获取用户对他/她观看过的电影的评分。

相关代码不完整;但我在测试过程中遇到了错误:

#include <stdio.h>
#include <stdlib.h>
FILE * fptr;

struct movie_show
{
char movie_title[50];
float movie_story, movie_characters, movie_art;
float average_score;
};

/*************************************************************************/

int main()
{
printf("[MOVIE RATER]\n\n");

NumMovie();
RatingMovie();

printf("\n\n");
getch();
return 0;
}

/*************************************************************************/

void NumMovie()
{
int num_movie;

printf("How many movies would you like to rate: ");
scanf(" %d", &num_movie);

if(num_movie < 1)
{
exit(0);
}

RatingMovie(num_movie);

}

/**************************************************************************/

void RatingMovie(int num_movie)
{
int i;
struct movie_show mov_show[num_movie];

for (i = 0; i < num_movie; i++)
{

printf("movie #%d", i + 1);
getchar();
printf("\nTitle: ");
fgets(mov_show[i].movie_title, 50, stdin);
scanf(" %s", mov_show[i].movie_title);

printf("\nBased on a 1-10 rating scale, how would you rate the: ");
printf("\nStory: ");
scanf(" %f", &mov_show[i].movie_story);

}



}

该函数特别使程序在执行循环后停止:

void RatingMovie(int num_movie)
{
int i;
struct movie_show mov_show[num_movie];

for (i = 0; i < num_movie; i++)
{

printf("movie #%d", i + 1);
getchar();
printf("\nTitle: ");
fgets(mov_show[i].movie_title, 50, stdin);
scanf(" %s", mov_show[i].movie_title);

printf("\nBased on a 1-10 rating scale, how would you rate the: ");
printf("\nStory: ");
scanf(" %f", &mov_show[i].movie_story);

}



}

提前谢谢您。

最佳答案

在您的 main() 中,你打电话

   RatingMovie();

但是RatingMovie的定义是

void RatingMovie(int num_movie);

表示RatingMovie()需要一个 int 作为参数。

由于您没有声明RatingMovie()在调用 main() 之前,此时编译器认为 RatingMovie 不带参数并返回一个 int。

在运行时,当您的程序调用RatingMovie()时来自main() , RatingMovie(int num_movie)接收垃圾作为其 num_movies参数,导致未定义的行为。在这种情况下你的程序崩溃了,可能是因为 num_movie是负数或者很大。

其他问题恕我直言:

  • 您调用RatingMovie()在你的代码中两次。选一个。
  • struct movie_show mov_show[num_movie]; num_movie 不是常量,这是非标准 C。使用常量表示电影的最大值,或使用 calloc() 分配数组或malloc()
  • 调用 exit(0);来自NumMovie()不是很优雅。作为应用程序正常流程的一部分,必须有一种更优雅的方式来处理退出。

如果您将所有函数体移到 main() 之前,并重新排序函数并修复所有问题,直到编译器发出不再发出警告,您的程序应该可以正常运行。

关于c - 调用使用 "for"循环填充全局结构数据的函数时出现运行时错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44700171/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com