You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++ k近邻聚类程序for循环输出异常:字符前出现不明数字

字符前出现不明数字的原因分析

问题场景

我用C++编写了一个针对示例数据的k近邻聚类简易程序,目前处于算法第一次迭代阶段。发现char point[] = {...}数组输出异常:原本期望输出{A B C D … H}这类纯字母,实际输出却带有字符前的不明数字。输出示例如下:

A C2 2
4B C1 2.23607
9C C1 2.82843
17D C1 3.60555
30E C2 1
31F C1 2.23607
36G C2 0
36H C1 0
36
Process returned 0 (0x0)   execution time : 0.031 s
Press any key to continue.

对应的代码如下:

#include <iostream>
#include <math.h>

using namespace std;

int main()
{
char point[] = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H'};
float x[] = {1, 3, 4, 5, 1, 4, 1, 2};
float y[] = {3, 3, 3, 3, 2, 2, 1, 1};
float m1[] = {x[(sizeof(x)/sizeof(float))-1], y[(sizeof(y)/sizeof(float))-1]};
float m2[] = {x[(sizeof(x)/sizeof(float))-2], y[(sizeof(y)/sizeof(float))-2]};
string group[8];
float sumdq =0;

    for(int i=0;i<=sizeof(point)-1;i++)
    {
        float d1 = sqrt(pow(x[i]-m1[0],2) + pow(y[i]-m1[1],2));
        float d2 = sqrt(pow(x[i]-m2[0],2) + pow(y[i]-m2[1],2));
        if(d1<d2)
        {
            group[i] = "C1";
            sumdq =sumdq + pow(d1,2);
            cout<<point[i]<< " "<<group[i]<< " "<<d1<<endl;
        }
        else
        {
            group[i] = "C2";
            sumdq =sumdq + pow(d2,2);
            cout<<point[i]<< " "<<group[i]<< " "<<d2<<endl;
        }
        cout<<sumdq;
    }
    return 0;
}

原因拆解

这些数字并非字符本身的问题,而是上一次循环输出的sumdq值:你在每次循环末尾执行了cout<<sumdq;但没有添加换行符,导致sumdq的输出和下一次循环的字符连在了一起:

  • 第一次循环:输出A C2 2后,打印4(sumdq=2²=4),无换行
  • 第二次循环:直接输出B C1 2.23607,就会跟在之前的4后面,变成4B...
  • 后续循环以此类推,每次末尾的sumdq残留导致了字符前的数字

另外补充一个潜在问题:for(int i=0;i<=sizeof(point)-1;i++)的写法虽然当前能运行,但更规范的写法是i < sizeof(point)/sizeof(point[0]),避免手动计算长度出错。

解决方法

根据需求调整输出逻辑即可:

  1. 如果需要每次循环单独打印sumdq,在末尾添加换行符:
    cout<<sumdq<<endl;
    
  2. 如果只需要最终的总sumdq,把cout<<sumdq;移到循环外部:
    for(...) {
        // 循环内原有逻辑
    }
    cout<<sumdq<<endl;
    

内容的提问来源于stack exchange,提问作者Piotr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 06:31:20