每到饭点,又到了世纪难题“一会吃什么?”于是用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相对应上,显示结果的时候,就只显示菜名
结果展示
代码框架
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
| #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}; 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() { .... 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,于是就扔给权哥调试了。当时写的时候,很碎片化,思路也乱七八糟,想到哪里加哪里,于是变量名,全局变量都定义的乱七八糟的。看着他调试的时候,我对着代码随口来了句,什么狗屎代码。
于是他说:“是啊,谁写的啊,哦,我明白了。狗拉的代码,就叫狗屎代码。”
。。。。。。。阿呸,每日思考,这样的人,为什么会有女朋友啊。