void PredictEmo() { int len, i, j, k = 0,emtion; double temdata[62] = { 0 },data = 0; char temtestSet[70], s[1000]; InputBox(s, 1500, _T("请输入一组数据"), _T("情绪管理系统"), NULL, 500, 500, false); len = strlen(s); for (i = 0; i < len; i++) { j = 0; // 每次循环时重新初始化数组和变量 memset(temtestSet, 0, sizeof(temtestSet)); while (!(s[i] == ' ') && i < len) { // 需要判断 i 是否小于 len,否则可能会越界 temtestSet[j++] = s[i++]; } temdata[k++] = atof(temtestSet); // 将字符串转换成浮点数 } for ( j = 0; j < dimNum; j++) { data += temtestSet[j]; } for ( j = 0; j < dimNum; j++) { g_temtestSet.data[j] = temtestSet[j] / data; } emtion=KNN(0, 1); printf("%d", emtion); switch (emtion) { case 0: MessageBox(NULL, _T("您挺开心的!"), _T("test"), MB_OK); break; case 1: MessageBox(NULL, _T("您挺平静的!"), _T("test"), MB_OK); break; case 2: MessageBox(NULL, _T("您挺悲伤的!"), _T("test"), MB_OK); break; default:; } }有哪里错了
时间: 2024-03-10 08:45:13 浏览: 86
代码中有几处错误需要修正:
1. 变量名错误
在代码中,使用了变量 `temtestSet` 来表示输入的一组数据,但是在计算 `data` 和赋值给 `g_temtestSet.data` 时,却使用了 `temtestSet[j]`。这应该是一个笔误,应该修改为 `temdata[j]`。
2. 计算 `data` 的错误
在计算 `data` 时,应该使用 `temdata[j]` 而不是 `temtestSet[j]`。同时,由于 `data` 是用于归一化的分母,需要将其初始化为0,而不是使用 `temtestSet` 数组中的任意一个数。
3. 调用 KNN 函数时的参数错误
在调用 `KNN` 函数时,应该传入 `temdata` 数组作为参数,而不是传入常量值 0 和 1。
修正后的代码如下:
```
void PredictEmo() {
int len, i, j, k = 0, emtion;
double temdata[62] = { 0 }, data = 0;
char temtestSet[70], s[1000];
InputBox(s, 1500, _T("请输入一组数据"), _T("情绪管理系统"), NULL, 500, 500, false);
len = strlen(s);
for (i = 0; i < len; i++) {
j = 0;
memset(temtestSet, 0, sizeof(temtestSet));
while (!(s[i] == ' ') && i < len) {
temtestSet[j++] = s[i++];
}
temdata[k++] = atof(temtestSet);
}
for (j = 0; j < dimNum; j++) {
data += temdata[j];
}
for (j = 0; j < dimNum; j++) {
g_temtestSet.data[j] = temdata[j] / data;
}
emtion = KNN(temdata, 1);
printf("%d", emtion);
switch (emtion) {
case 0:
MessageBox(NULL, _T("您挺开心的!"), _T("test"), MB_OK);
break;
case 1:
MessageBox(NULL, _T("您挺平静的!"), _T("test"), MB_OK);
break;
case 2:
MessageBox(NULL, _T("您挺悲伤的!"), _T("test"), MB_OK);
break;
default:;
}
}
```
阅读全文