gpt4 book ai didi

c - 矩阵运算,从 char 到 float 的错误转换

转载 作者:太空宇宙 更新时间:2023-11-04 07:33:11 25 4
gpt4 key购买 nike

该程序从文本文件中输入一个字符串,例如:

2 1.0 2.0 3.0 4.0

其中第一个数字是方阵的维数,其他数字是矩阵的元素(以列主要形式存储)。每个数字都用“空格”字符分隔该程序将所有数字加到一列上,然后乘以这种类型的每个结果。IE。使用此字符串,结果将是:21.0问题是:使用这个输入,程序的输出将是:

Input string is 2 1.0 2.0 3.0 4.0

Extracted char type token 1.0 from the string

Extracted char type token 2.0 from the string

Extracted char type token 3.0 from the string

Extracted char type token 4.0 from the string

Converted char type token 1.0 into float type

Converted char type token 2.0 into float type

Converted char type token 2.0 into float type

Converted char type token 3.0 into float type

Printing matrix of float types:

1.000000

2.000000

2.000000

3.000000

Final result is 15.000000

它应该是:输入字符串为 2 1.0 2.0 3.0 4.0

Extracted char type token 1.0 from the string

Extracted char type token 2.0 from the string

Extracted char type token 3.0 from the string

Extracted char type token 4.0 from the string

Converted char type token 1.0 into float type Converted char type token 2.0 into

float type Converted char type token 2.0 into float type Converted

char type token 3.0 into float type

Printing matrix of float types:

1.000000

2.000000

3.000000

4.000000

Final result is 24.000000

这里是代码

#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>




/* void calculus(char string[], int matrixDimension)
* Executes the following procedure:
* 1) it extracts from the string, various char type tokens
* 2) converts these char type tokens into float types and stores it into "squareMatrix" bidimensional vector
* 3) does the calculus
*/
void calculus(char string[]);





int main()
{
FILE* fileToReadFd;
int nRead;
char string[500] = {0};
const char pathNameRead[] = "/home/caterpillar/canc/matrice2.txt";
if((fileToReadFd = fopen(pathNameRead, "r")) == NULL)
{
printf("Ho provato ad aprire %s\n", pathNameRead);
printf("errore nell'aprire il file\n" "%s\n", strerror(errno));
}
nRead=fread(&string[0],sizeof(char),100,fileToReadFd);


printf("Input string is %s\n", &string[0]);
calculus(string);
fclose(fileToReadFd);
return 0;

}


void calculus(char string[])
{
int matrixDimension = atoi(&string[0]);

float finalResult = 1;

// float type square matrix to be filled
float squareMatrix[matrixDimension][matrixDimension];

// stores the result of every column addition
float columnAddition[matrixDimension];

/*
* stores tokens from the string
* I.E.:
* token[0] contains "1.0"
* token[1] contains "2.0"
* token[2] contains "3.0"
* token[3] contains "4.0"
*/
char tokens[matrixDimension * matrixDimension][8];

/*
* zero initialize columnAddition vector
*/
for(int i = 0; i < matrixDimension; i++)
{
columnAddition[i] = 0;
}

/*
* First strtok is necessary to be left alone since it takes away
* the first token that is not usefull ( it is the matrix dimension)
*/
strtok(&string[0], " ");
for(int i = 0; i < (matrixDimension * matrixDimension); i++)
{
strcpy(&tokens[i][0], strtok(NULL, " "));
printf("Extracted char type token %s from the string\n", &tokens[i][0]);
}

for(int i = 0; i < matrixDimension; i++)
{
for(int j = 0; j < matrixDimension; j++)
{
squareMatrix[i][j] = atof(&tokens[i+j][0]);
printf("Converted char type token %s into float type\n", &tokens[i+j][0]);
}
}
printf("\nPrinting matrix of float types:\n");
for(int i = 0; i < matrixDimension; i++)
{
for(int j = 0; j < matrixDimension; j++)
{
printf("%f\n", squareMatrix[i][j]);
}
}
// does calculus
for(int j = 0; j < matrixDimension; j++)
{
for(int i = 0; i < matrixDimension; i++)
{

columnAddition[j] = columnAddition[j] + squareMatrix[i][j];
}
}
for(int i = 0; i < matrixDimension; i++)
{
finalResult = finalResult * columnAddition[i];
}
printf("Final result is %f\n", finalResult);
}

最佳答案

我认为这是问题所在:

squareMatrix[i][j] = atof(&tokens[i+j][0]);
printf("Converted char type token %s into float type\n", &tokens[i+j][0]);

因为这会为 (i=0, j=1) 和 (i=1, j=0) 引用相同的标记,因为 1+0 = 1 和 0+1 = 1

应该是

squareMatrix[i][j] = atof(&tokens[i*matrixDimension+j][0]);
printf("Converted char type token %s into float type\n", &tokens[i*matrixDimension+j][0]);

关于c - 矩阵运算,从 char 到 float 的错误转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11484452/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com