| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 20146 人关注过本帖, 4 人收藏
标题:来,你也可以用 C 语言写一个聊天机器人
只看楼主 加入收藏
素还真少爷
Rank: 2
等 级:论坛游民
帖 子:7
专家分:26
注 册:2015-4-27
收藏
得分:0 
感觉很有 意思
2015-05-01 08:13
ttnkh21
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2015-7-7
收藏
得分:0 
回复 6楼 AleTiff
  用的vs2013

错误    1    error C2057: 应输入常量表达式                                            :char *responses[MAX_RESP];
错误    2    error C2233: “KnowledgeBase”: 包含大小为零的数组的对象数组是非法的     :record KnowledgeBase[] = {
警告    3    warning C4018: “<”: 有符号/无符号不匹配                                :for (int i = 0; i < nKnowledgeBaseSize; ++i) {
4    IntelliSense:  表达式必须含有常量值                                              :


2015-07-07 22:46
ditg
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:16
帖 子:852
专家分:1937
注 册:2014-4-10
收藏
得分:0 
乌卡卡……

梦想拥有一台龙芯3A-4000
2015-07-07 23:31
jianx7068754
Rank: 1
来 自:中国。重庆
等 级:新手上路
帖 子:1
专家分:0
注 册:2017-3-20
收藏
得分:0 
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include <string.h>


/*
    描述:这是一个聊天机器人程序一个非常基本的例子 chatterbot1
*/

void chatterbot1()
{
    char* Response[] = {
        "我听到了!",
        "你是在和我说话。",
        "继续说,我在听。",
        "哈哈,真是非常有趣的谈话。",
        "后来呢?"   
    };

    srand((unsigned) time(NULL));

    char sInput[5] = {0};
    char* sResponse = NULL;

    while(1) {
        printf(">");
        scanf("%4s", &sInput);
        fflush(stdin);
        if(sInput[0] == 0x71 || sInput[0] == 0x51 ){
            printf("和你聊天真的很愉快, 下次再见。\n");
            _sleep(1000);
            break;
        }
        int nSelection = rand() % 5;
        sResponse = Response[nSelection];
        printf("%s\n", sResponse);
    }
}

/*
    描述:这是一个改进版聊天机器人程序 chatterbot2
*/
const int MAX_RESP = 3;
typedef struct {
    char *input;
    char *responses[MAX_RESP];
}record;

record KnowledgeBase[] = {
    {"WHAT IS YOUR NAME",
    {"嗯,我的名字叫瞎聊。",
     "你可以叫我公主...,是啊,我是大小姐啊。",
     "为什么你想知道我的名字?下一步是要交换QQ号吗?"}
    },

    {"HI",
    {"哈哈,好啊!",
     "你是谁?",
     "噢,你好!"}
    },
   
    {"HOW ARE YOU",
    {"我干得不坏!",
    "你干得怎么样?",
    "为什么你会想知道我是怎么做到的?"}
    },

    {"WHO ARE YOU",
    {"我尼玛就是个程序啊。",
     "表说,我知道你知道我是谁。",
     "为什么还问?"}
    },

    {"ARE YOU INTELLIGENT",
    {"是的,当然是的。",
     "你是怎么想的?",
     "哈哈,事实上我确实很聪明。"}
    },

    {"ARE YOU REAL",
    {"这对你真的是个问题吗?",
     "啥意思啊?你?",
     "我尽量让我看起来像个真正的人类。"}
    }
};

size_t nKnowledgeBaseSize = sizeof(KnowledgeBase)/sizeof(KnowledgeBase[0]);

record* find_match(char*  input) {
    for(int i = 0; i < nKnowledgeBaseSize;  ++i) {
        if( !stricmp( KnowledgeBase[i].input, input ) )
            return &KnowledgeBase[i];
    }
    return NULL;
}

void chatterbot2()
{
    srand((unsigned) time(NULL));

    char sInput[20] = {0};
    char* sResponse = NULL;

    while(1) {
        printf(">");
        scanf("%19[^\n]", &sInput);
        fflush(stdin);

        record* responses = find_match(sInput);
        if(sInput == "BYE") {
            printf("和你聊天太愉快了,下次再来!\n");
            _sleep(1000);
            break;
        }
        else if( !responses )  {
            printf("我,我,我不确定我是否能理解你说的是什么 ...\n");
        }
        else {
            int nSelection = rand()  % MAX_RESP;
            sResponse = responses->responses[nSelection];
            printf("%s\n", sResponse);
        }
    }
}

// 太久不写代码了,我不确信 main 是否是这样声明的...
int main()
{
    chatterbot1();
    chatterbot2();
    return 0;
}
//我是来学习的
2017-03-20 20:13
skskskjajqah
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2021-12-11
收藏
得分:0 
回复 楼主 AleTiff
一运行就疯狂出句子,都不等用户输入,怎么回事啊
2021-12-11 00:14
快速回复:来,你也可以用 C 语言写一个聊天机器人
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.031866 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved