【发布时间】:2017-12-16 05:25:44
【问题描述】:
该程序旨在根据用户的输入显示视频游戏库存。用户需要使用 num_of_games 确定循环运行多长时间。我们必须使用切换循环来确定类型。它可以编译,但无法正确显示。
#include <stdio.h>
#include <string.h>
#define MAX 16
typedef enum genre_type{ action = 0, rpg = 1, simulation = 2,
strategy = 3, sports = 4} genre_t;
typedef struct{
char title[MAX];
int num_sold;
genre_t genre;
}game_s;
// suppose to use functions and enum list for determining the genre
void get_game_info(game_s *ptr);
void display_inventory(game_s game[], int num_of_games);
int
main(void){
int i=0, num_of_games;
int c_game=0;
game_s game[num_of_games];
printf("How many games are there in inventory? ");
scanf("%d", &num_of_games);
fflush(stdin);
printf("\n");
while(c_game < num_of_games){
printf("\n");
get_game_info(&game[c_game]);
c_game++;
}
printf("\n");
display_inventory(game, num_of_games);
return(0);
}
void get_game_info(game_s *ptr)
{
int i, str_len, genre, num_sold;
printf("Title of game <maximum of 15 characters>: ");
gets(ptr->title);
str_len = strlen(ptr->title);
if(str_len >= 15){
printf("Title will be truncated\n");
ptr->title[MAX]= '\0';
}
printf("Number sold: ");
scanf("%d", &ptr->num_sold);
fflush(stdin);
printf("Genre (0-action, 1-rpg, 2-simulation, 3-strategy, 4-sports): ");
scanf("%d", &ptr->genre);
fflush(stdin);
if(ptr->genre>4){
printf("Not a valid genre");
fflush(stdin);
}
}
void display_inventory(game_s game[], int num_of_games)
{
int i, genre;
printf("Title\t\t\t\t\t\tQuantity Sold\t\t\t\t\t\tGenre");
printf("\n=====\t\t\t\t\t\t=============\t\t\t\t\t\t=====\n");
for(i=0; i < num_of_games; i++){
switch(genre){
case action: printf("Action"); break;
case rpg: printf("RPG"); break;
case simulation: printf("Simulation"); break;
case strategy: printf("Strategy"); break;
case sports: printf("Sports"); break;
default: puts("Not a choice. Try again"); break;
我认为这是导致大部分问题的原因。我不知道我是否在 game[I].title 和其他人中调用了该结构。 问题出在我认为的结构调用上。如果我使用 game_s[I].title 我得到“预期的表达式之前”错误,如果我使用 game[I].title 它不能正确打印
printf("%s\t\t\t\t\t\t%d\t\t\t\t\t\t%s", game[i].title, game[i].num_sold, game[i].genre);
printf("\n");
}
}
}
【问题讨论】:
-
fflush(stdin);为什么?你是从哪里弄来的? -
geeksforgeeks.org/use-fflushstdin-c 可能会有所启发。 man7.org/linux/man-pages/man3/fflush.3.html 也是。简而言之,
fflush()用于刷新输出。你不能刷新输入;你正在接收它(所以它会在 它被刷新到 你之后)。微软重载它来做其他事情。 -
gets不好。考虑避开此功能。 -
@DanFarrell,我认为这里的问题远远超出
fflush(并不是说这不是问题) -
@Brauer - 好吧,这对
game[num_of_games]没有好处,是吗?见 How to debug small programs 并与鸭子交谈......真的,它有帮助:)