随机姓氏生成器

        是一个破写小说的,因为每次给路人npc起名都要去搜百家姓然后用一些类似骰子随机数之类 的方法随机选一个姓,次数多了有点嫌麻烦,于是用C语言自制了一个随机姓氏生成器。是一个计算机初学者,用了随机数和文件读取的知识点,总共也就一百多行代码,方法我自己感觉挺...硬的,不怎么美观,欢迎各位师傅提出建议。

        github指路Wtemile/surname: 以《百家姓》中504个姓氏为数据库,随机生成一个姓氏,或者可以指定生成复姓。/ Using the 504 surnames from "Hundred Family Names" as a database, randomly generate a surname, or specify a compound surname.

        因为这是我第一次正儿八经试着在github上传项目,也是第一次写md文件,很多东西没有完全搞明白应该怎么做,项目中的文件结构参考了deepseek的建议以及github上其它师傅的仓库,如果有什么不合适的地方欢迎指出!提前谢谢各位师傅啦~

        源码也放在下面了,其中的bjx.txt和lbjx.txt两个文件中是百家姓中的姓氏。

        其中设置终端编码为UTF-8的函数是从这篇博客学习的,真的解决了我长期的困扰....:C语言-解决Windows cmd utf8中文乱码_utf-8 printf 中文-CSDN博客

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <windows.h>
#define Maxrand 504
#define Max2 60

int count=0;

int menu();
void arand();
void lrand();
void closepro();
void wind_cmd_support_utf8(void);

int main()
{
    wind_cmd_support_utf8();
    int choice=0;
    srand((unsigned int)time(NULL));
    printf("嗨嗨~这里是随机姓氏工具!\n");
    while(1)
    {
        menu();
        scanf("%d",&choice);
        switch(choice)
        {
            case 1: arand();break;
            case 2: lrand();break;
            case 3: closepro();return 0;
            default:printf("诶诶?我迷路啦......再告诉我一次可以吗?\n");
        }
    }
}

void closepro()
{
    printf("拜拜啦~\n");
    int i=3;
    for(;i>0;i--)
    {
        printf("程序将在%d秒后关闭",i);
        Sleep(1000);
        printf("\r");
    }
    return;
}

void wind_cmd_support_utf8(void)
{
#ifdef WIN32
    system("chcp 65001 & cls"); //cls 用来清除 chcp 的输出               !!!!!!神迹!!!!!
#endif
}

int menu()
{
    printf("-------------------------------\n");
    printf("输入1后回车来生成一个随机姓氏!\n");
    printf("输入2后回车来生成一个随机复姓!\n");
    printf("输入3后回车退出程序\n");
    printf("-------------------------------\n");
    return 0;
}

void lrand()
{
    while(getchar()!='\n');
    while(1)
    {
        int position=rand()%Max2;
        char result[9]={0};
        FILE *fa=fopen("./data/lbjx.txt","r");
        ++count;
        if(!fa) {printf("Warning:Open the file failed!\n"); return;}
        for(int i=1;i<=position;i++)
        fgets(result,9,fa);
        printf("-------------------------------\n");
        printf("第%d次生成结果:《百家姓》中第%d个姓为:%s",count,position,result);
        printf("-------------------------------\n");
        fclose(fa);
        printf("回车继续生成,或输入任一字符返回上一级");
        if(getchar()=='\n') continue;
        else break;
    }
    while(getchar()!='\n'); //清理缓冲区,避免用户输入多字符后被主函数中新的getchar接收
    return;
}

void arand()
{
    while(getchar()!='\n');
    while(1)
    {
        int position=rand()%Maxrand;
        while(!position) position=rand()%Maxrand;  //避免结果为0导致错误
        char result[9]={0};
        FILE *fa=fopen("./data/bjx.txt","r");
        ++count;
        if(!fa) {printf("Warning:Open the file failed!\n"); return;}
        for(int i=1;i<=position;i++)
        fgets(result,9,fa);
        printf("-------------------------------\n");
        printf("第%d次生成结果:《百家姓》中第%d个姓为:%s",count,position,result);
        printf("-------------------------------\n");
        fclose(fa);
        printf("回车继续生成,或输入任一字符返回上一级");
        if(getchar()=='\n') continue;
        else break;
    }
    while(getchar()!='\n'); //清理缓冲区,避免用户输入多字符后被主函数中新的getchar接收
    return;
}

下面放一张使用截图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值