简易AI
2026-03-17 19:56:54
发布于:浙江
这个简易AI花了我一天阳寿,功能不是很全面,勿喷!!!
废话不多说,代码如下:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
#include <stdbool.h>
// 最大输入长度
#define MAX_INPUT 1024
char user_name[50] = "朋友"; // 默认称呼
// 简单的字符串包含检查 (检查 haystack 中是否包含 needle)
bool contains(const char *haystack, const char *needle) {
return strstr(haystack, needle) != NULL;
}
// 获取当前时间字符串
void get_current_time(char *buffer, size_t size) {
time_t now = time(NULL);
struct tm *t = localtime(&now);
strftime(buffer, size, "%H:%M:%S", t);
}
int main() {
char input[MAX_INPUT];
char time_buf[64];
// 初始化随机数种子,用于默认回复
srand((unsigned int)time(NULL));
printf("=== 简易 C 语言 AI 机器人 ===\n");
printf("你好!我是 C-Bot。你可以和我聊天 (输入 '退出' 结束)。\n\n");
while (true) {
printf("你: ");
// 安全读取一行输入 (包括空格)
if (fgets(input, sizeof(input), stdin) == NULL) {
break;
}
// 去除末尾的换行符
size_t len = strlen(input);
if (len > 0 && input[len - 1] == '\n') {
input[len - 1] = '\0';
}
// 检查是否退出
if (strcmp(input, "退出") == 0 || strcmp(input, "quit") == 0) {
printf("C-Bot: 再见!祝你有美好的一天!\n");
break;
}
// --- 核心逻辑:关键词匹配 ---
if (contains(input, "你好") || contains(input, "您好") || contains(input, "嗨")) {
printf("C-Bot: 你好呀!很高兴见到你。\n");
}
else if (contains(input, "名字") || contains(input, "是谁")) {
printf("C-Bot: 我叫 C-Bot,是一个用 C 语言写的简单机器人。\n");
}
else if (contains(input, "时间") || contains(input, "几点")) {
get_current_time(time_buf, sizeof(time_buf));
printf("C-Bot: 现在的时间是 %s。\n", time_buf);
}
else if (contains(input, "年龄") || contains(input, "多大")) {
printf("C-Bot: 我永远停留在编译完成的那一刻,没有年龄概念哦。\n");
}
else if (contains(input, "再见") || contains(input, "拜拜")) {
printf("C-Bot: 下次再聊!\n");
break;
}
else if (contains(input, "C语言") || contains(input, "C++")) {
printf("C-Bot: C 语言是一门强大且高效的编程语言,虽然有点难,但很有趣!\n");
}
else if (contains(input, "笑话")) {
printf("C-Bot: 为什么程序员总是分不清万圣节和圣诞节?因为 Oct 31 == Dec 25!\n");
}
else if (contains(input, "+")) {
int num1, num2;
// 尝试从输入中读取 "数字 + 数字" 的格式
// %d 代表读取一个整数,中间的 "+" 代表必须包含加号
if (sscanf(input, "%d + %d", &num1, &num2) == 2) {
int result = num1 + num2;
printf("C-Bot: 计算结果是 %d + %d = %d\n", num1, num2, result);
} else {
printf("C-Bot: 我发现了加号,但我没看懂具体的数字哦。试着输入像 '5 + 3' 这样的格式吧!\n");
}
}
else if (contains(input, "-")) {
int num1, num2;
// 尝试从输入中读取 "数字 + 数字" 的格式
// %d 代表读取一个整数,中间的 "+" 代表必须包含加号
if (sscanf(input, "%d - %d", &num1, &num2) == 2) {
int result = num1 - num2;
printf("C-Bot: 计算结果是 %d - %d = %d\n", num1, num2, result);
} else {
printf("C-Bot: 我发现了减号,但我没看懂具体的数字哦。试着输入像 '5 - 3' 这样的格式吧!\n");
}
}
else if (contains(input, "*")) {
int num1, num2;
// 尝试从输入中读取 "数字 + 数字" 的格式
// %d 代表读取一个整数,中间的 "+" 代表必须包含加号
if (sscanf(input, "%d * %d", &num1, &num2) == 2) {
int result = num1 * num2;
printf("C-Bot: 计算结果是 %d * %d = %d\n", num1, num2, result);
} else {
printf("C-Bot: 我发现了乘号,但我没看懂具体的数字哦。试着输入像 '5 * 3' 这样的格式吧!\n");
}
}
else if (contains(input, "/")) {
int num1, num2;
if (sscanf(input, "%d / %d", &num1, &num2) == 2) {
if (num2 == 0) {
printf("C-Bot: 计算结果是 %d / %d = …… 哎呀!数学老师说过,0 不能做除数哦!\n", num1, num2);
} else {
int result = num1 / num2;
printf("C-Bot: 计算结果是 %d / %d = %d\n", num1, num2, result);
}
} else {
printf("C-Bot: 我发现了除号,但我没看懂具体的数字哦。试着输入像 '10 / 2' 这样的格式吧!\n");
}
}
else if (contains(input, "我叫")) {
if (sscanf(input, "我叫%s", user_name) == 1) {
printf("C-Bot: 你好 %s,我记住你的名字啦!以后我就这么叫你。\n", user_name);
} else {
printf("C-Bot: 你想告诉我你的名字吗?请直接说'我叫某某'哦。\n");
}
}
else {
// 默认回复数组
const char *default_responses[] = {
"我不太明白你的意思,能换个说法吗?",
"这很有趣,请继续说。",
"我只是个简单的程序,还在学习人类语言呢。",
"你能告诉我更多细节吗?",
"嗯... 我在思考这个问题(其实我在发呆)。"
};
int random_idx = rand() % 5;
printf("C-Bot: %s\n", default_responses[random_idx]);
}
printf("\n");
}
}
看完的还请点个赞吧!!!


这里空空如也



















有帮助,赞一个