每到饭点,又到了世纪难题“一会吃什么?”于是用C写了这个简单的小代码来解决这个世纪难题。
代码
https://github.com/Gryffinbit/What_To_Eat
设计思路
typedef
一个结构体Food
,数据元素为菜的ID,菜名,这道菜所处区域。void iterm()
需要有一个菜单导入的功能,把可供选择的菜放进去。用到了
fopen
fscanf
fclose
函数来读取文件。导入的菜单,格式要求,用空格来隔开三个元素。读取成功后,将内容分门别类的存入到结构体每个元素的数组中void classify
选择去哪吃,以便后续根据选择的地点,来筛选出符合所在地附近的菜。void avaliable()
决定了去哪里吃之后,筛选出菜单中符合条件的地方用到了
strcmp
来对比两个数组中的内容是否一致。输入的位置和菜单中某些菜的位置一致,则将符合条件菜的ID存入avali_i[ ]
符合条件数组。av_num是符合条件菜的数量。void generate(void)
随机数生成,让生成的随机数来决定吃什么void convert()
将生成的随机数,与菜名的ID相对应上,显示结果的时候,就只显示菜名
结果展示
代码框架
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
typedef struct Foods {
int id;
char name[100];
char area[30]; //“吃什么”时的所在地
} Food;
Food food[100];
int g_i = 0; //从文件中读入的数据,存入数组
int num; //
char location[30]; //去哪吃
int avali_i[50] = {-1}; //符合去哪吃条件的,将菜名ID存入数组
int av_num = 0; //符合条件的菜的数量
void iterm() { //读入菜单,并存入数组以备后面使用
FILE* menu = fopen("/Users/gryffinbit/vscode_project/生成食物/menu.txt", "r");
....
fclose(menu);
}
void classify() { //选择去哪里吃
....
scanf("%s", location);
}
void avaliable() {//决定了去哪里吃之后,筛选出菜单中符合条件的地方
...
}
void generate(void) { //随机数生成
...
}
void convert() { //将生成的随机数,与菜名的ID相对应上
....
printf("那就去吃 ❣️ %s ❣️ 吧!\n", food[g_i].name);
}
int main() {
char confirm;
iterm();
printf("去哪吃呢?%s", location);
printf("可以选择的地方:芙蓉食堂附近,后街附近,网安院附近,香樟,东苑\n");
scanf("%s", location);
avaliable();
while(1){
generate();
convert();
printf("要不要吃这个菜呢?再来一次吗?[Y/N] ");
scanf("%s",&confirm);
printf("----------------------💙------------------------\n");
if(confirm=='N')
break;
}
return 0;
}
控诉权哥
写完代码,功能实现有点小bug,于是就扔给权哥调试了。当时写的时候,很碎片化,思路也乱七八糟,想到哪里加哪里,于是变量名,全局变量都定义的乱七八糟的。看着他调试的时候,我对着代码随口来了句,什么狗屎代码。
于是他说:“是啊,谁写的啊,哦,我明白了。狗拉的代码,就叫狗屎代码。”
。。。。。。。阿呸,每日思考,这样的人,为什么会有女朋友啊。