每到饭点,又到了世纪难题“一会吃什么?”于是用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相对应上,显示结果的时候,就只显示菜名

结果展示

代码框架

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

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

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

评论