抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

每到饭点,又到了世纪难题“一会吃什么?”于是用C写了这个简单的小代码来解决这个世纪难题。

代码

https://github.com/Gryffinbit/What_To_Eat

设计思路

  1. typedef 一个结构体Food,数据元素为菜的ID,菜名,这道菜所处区域。

  2. void iterm()需要有一个菜单导入的功能,把可供选择的菜放进去。

    用到了fopen fscanf fclose函数来读取文件。导入的菜单,格式要求,用空格来隔开三个元素。读取成功后,将内容分门别类的存入到结构体每个元素的数组中

  3. void classify 选择去哪吃,以便后续根据选择的地点,来筛选出符合所在地附近的菜。

  4. void avaliable()决定了去哪里吃之后,筛选出菜单中符合条件的地方

    用到了strcmp来对比两个数组中的内容是否一致。输入的位置和菜单中某些菜的位置一致,则将符合条件菜的ID存入avali_i[ ]符合条件数组。av_num是符合条件菜的数量。

  5. void generate(void) 随机数生成,让生成的随机数来决定吃什么

  6. 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}; //符合去哪吃条件的,将菜名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,于是就扔给权哥调试了。当时写的时候,很碎片化,思路也乱七八糟,想到哪里加哪里,于是变量名,全局变量都定义的乱七八糟的。看着他调试的时候,我对着代码随口来了句,什么狗屎代码。

于是他说:“是啊,谁写的啊,哦,我明白了。狗拉的代码,就叫狗屎代码。”

。。。。。。。阿呸,每日思考,这样的人,为什么会有女朋友啊。

评论