我得到了一列24个科学数字的列表,作为txt文件(使用%le格式)。
#include <stdio.h>
#include <stdlib.h>
void main()
{
int i;
int j;
/*matrix*/
double** mat=malloc(24*sizeof(double*));
for(i=0;i<24;++i)
mat[i]=malloc(1*sizeof(double));
FILE *file;
file=fopen("input.txt", "r");
if ((file = fopen("input.txt", "r")) == NULL)
{
printf("Error! opening file");
// Program exits if file pointer returns NULL.
exit(1);
}
else
for(i = 0; i < 24; i++)
{
for(j = 0; j < 1; j++)
{
if (!fscanf(file, "%le", &mat[i][j]))
break;
printf("%le\n",mat[i][j]);
}
}
fclose(file);
}现在我想把这个由24个元素组成的一维数组放入一个4×6矩阵A中。
我该怎么做?
我试过doing=>
for(m=1;m<=4;m++)
{
for(n=1;n<=6;n++)
{
mat[k][1]=A[i][j];
k++;
}
}
printf("%lf \n",A[i][j]); 但是这没什么,我对C是新手,所以非常感谢您的帮助。
对于一个简单的任务来说,这个程序太长了,比如我所知道的矩阵中的读写。
发布于 2016-10-30 13:57:11
for(m=1;m<=4;m++)
{
for(n=1;n<=6;n++)
{
mat[k][1]=A[i][j];
k++;
}
}您的循环索引是m和n,但是您使用i和j作为下标-- i和j在循环中从未被初始化或更新。
更大的问题是,您正在将A[i][j]的值分配给mat[k][1],而不是相反。
但是这仍然有一个问题--记住,在C中,N元素数组被索引为0到N1.如果A是一个4x6数组,而mat是一个24x1数组(稍后会详细介绍),那么应该编写您的循环。
for ( m = 0; m < 4; m++ )
{
for ( n = 0; n < 6; n++ )
{
A[m][n] = mat[k++][0];
}
}第一个元素位于索引0,第二个元素位于索引1,等等。
关于mat..。
如果您知道mat将存储24个值,那么为什么需要动态分配它呢?它也不清楚为什么它需要是一个24x1数组。只需将其声明为double的24元素数组即可。
double mat[24];
...
for ( i = 0; i < 24; i++ )
{
if ( scanf( file, "%le", &mat[i] ) != 1 )
// handle read error
}
...
for ( k = 0, i = 0; i < 4; i++ )
for ( j = 0; j < 6; j++ )
A[i][j] = mat[k++];最后,void main()应该是int main( void )。
发布于 2016-10-30 13:02:06
似乎您没有在循环中增加i,j索引,应该将printf放在第二个循环中。
尝尝这个
k=0;
for(i=0;i<4;i++)
for(j=0;j<6;j++)
{
A[i][j] = *(mat[k++]);
printf("%f\n",A[i][j]);
}发布于 2016-10-30 13:46:01
for(m=1;m<=4;m++) //wrong counters
{
for(n=1;n<=6;n++)
{
mat[k][1]=A[i][j]; //does not assign anything
k++;
}
}
printf("%lf \n",A[i][j]); //not in loop应该在for循环中从0开始计数,因为数组是从0索引的。并确保使用正确的符号,并将k声明为int并初始化它,即int k = 0;。
要将值赋值的东西必须在左边,所分配的东西必须在右边。
最后,您的print语句不在循环中。
下面是一个示例:
for(int i = 0; i < 4; i++){
for(int j = 0; j < 6; j++){
A[i][j] = mat[k][0];
k++;
printf("%lf \n",A[i][j]);
}
}https://stackoverflow.com/questions/40329319
复制相似问题