19

我正在从文件中读取数字。当我尝试将每个数字放入一个二维数组时,它会给我以下错误。我该如何摆脱这个消息?我的变量: FILE *fp; 字符线[80];

错误:从 char * 转换为 int 失去精度

代码:-

#include<stdio.h>
#include<string.h>

int main()
{
        FILE *fp;
        char line[80],*pch;
        int points[1000][10];
        int centroid[1000][10];
        float distance[1000][10];
        int noofpts=0,noofvar=0,noofcentroids=0;
        int i=0,j=0,k;

        fp=fopen("kmeans.dat","r");
        while(fgets(line,80,fp)!=NULL)
        {
                j=0;
                pch=strtok(line,",");
                while(pch!=NULL)
                {
                        points[i][j]=(int)pch;
                        pch=strtok(NULL,",");
                        noofvar++;
                        j++;
                }
                noofpts++;
                i++;
        }
        noofvar=noofvar/noofpts;
        printf("No of points-%d\n",noofpts);
        printf("No of variables-%d\n",noofvar);

        return 0;
}
4

2 回答 2

27

这是违规行:

points[i][j]=(int)pch;

您应该将其替换为

points[i][j]=atoi(pch);

atoi是一个函数,它将表示以十进制表示的整数的 C 字符串转换为int.

于 2012-09-14T02:35:02.673 回答
13

在 a 上编译时会发生此错误,但在 a 上64 bit machine可能不会发生,因为和32 bit machine的大小不同。char*int

64 位 sizeof(char*)上是 8 并且sizeof(int)是 4

32 位 sizeof(char*)上是 4 并且sizeof(int)是 4

于 2013-06-13T08:00:46.400 回答