c语言中怎么把屏幕输入的一组double数赋给一个数组

把这个赋值的函数用最简单办法写出来,怎么写
不要答非所问,很简单的问题,复制那么多字来干什么.希望有一个清晰的回答

// db.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <memory.h>
#include <string.h>

/*功能:接收屏幕上的输入一组DOUBLE类型数据并将他们赋给一个DOUBLE类型的数组
输入:用来接收double类型的一个指针的指针,该指针在调用者函数中定义,在此函数中分配内存,在调用者函数中释放内存
输出:提示及错误信息
返回:得到的double类型数组中double数据个数*/
int ReceiveDoubleArray(double **pArray)
{
char szInput[2048];/*定义2K大小的内存缓冲区来接收输入,输入不能超过2048个字符*/
char cSep = 0;/*保存分隔符*/
int iCount = 0;/*保存数据个数*/
int i = 0;
char szOneDouble[100];/*定义100个字节来当作临时变量拆分并保存每个double数据*/
char *pc = NULL;/*定义一个指针来拆分数据*/

memset(szInput,0x0,sizeof(szInput));/*将缓冲区置空*/
fflush(stdin);
printf("请输入一组数据包括各数据之间的分隔符以回车结束输入,\n如: 32.32,28.7,32.32,0.45(回车)\n输入 = ");
scanf("%s",szInput);
szInput[2047] = 0;/*确保下面使用pc时不会超出szInput的内存范围*/
fflush(stdin);/*刷新输入缓冲区*/
printf("输入你所使用的数据之间的分隔符(一个字符) = ");
scanf("%c",&cSep);

/*根据分隔符拆分输入的数据字符号串*/
/*第一遍循环检查输入的字符串中有多少个分隔符以判断有多少个double类型数据并同时
字符串中分隔字符用'\0'替换用来简化拆分并转换为double类型的操作过程
如:替换前为 32.32,28.7,32.32,0.45'\0' 则替换后为:
32.32'\0'28.7'\0'32.32'\0'0.45'\0'由一个字符串转换为了四个,且每个都是一个double数据的字符形式,
且每个都可以当作单独的字符串来处理
*/
pc = szInput;
iCount = 0;/*此处用来计算并保存分隔符的个数*/
while( *pc != 0 )/*当pc所指向的内存数据不为0时循环*/
{
if ( *pc == cSep )
{
*pc = '\0';
iCount++;
}
pc++;
}
/*有几个分隔符则表示有iCount+1个数(如用逗号分隔: 23.48,27.32,37.8 其中有两个逗号则有3个数*/
iCount++;
/*分配内存*/
*pArray = (double *)malloc(iCount*sizeof(double));
if( NULL == pArray )
{
printf("分配内存失败!");
return -1;
}

/*从字符串中取数并转换为double类型*/
pc = szInput;/*将pc指针指向保存输入的所有内容开始位置即第一个double数据的字符串地址*/
i = 0;
while ( i < iCount )/*获取各个数据*/
{
memset(szOneDouble,0x0,sizeof(szOneDouble));
strcpy(szOneDouble,pc);

(*pArray)[i] = atof(szOneDouble);/*将字符型数据转换为double型*/

/*找下一个字符表示数据的起点*/
pc++;
if ( *pc != '\0' && *(pc+1) != '\0' )
{
while( *pc != '\0' )
{
pc++;
}
}
if ( *(pc+1) != '\0' )
{
pc++;
}

i++;
}

return iCount;
}

int main(int argc, char* argv[])
{
int i = 0;
int iCount = 0;
/*定义double类型指针*/
double *pd = NULL;

/*将double类型的值为NULL的指针传入函数*/
iCount = ReceiveDoubleArray(&pd);
/*使用完函数后pd就分配了内存并指向了保存了double数据的数组第一个元素*/

printf("得到输入的数组为:\n");
for( i = 0 ; i < iCount ; i++ )
{
printf("array[%d] = %f\n",i,pd[i]);
}

/*释放内存*/
if ( pd != NULL )
{
free(pd);
}

fflush(stdin);
getchar();
return 0;
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2008-10-11
LZ好,1, 编程序一定要规范,最好合理安排空格和缩进,让程序看起来更容易,小程序还可以,有几页纸你就知道天书是怎么来的了。
2,主函数最好也有返回值类型,用int main() 然后返回 0 最好,void也可以,最好不要省略,这是习惯问题。
3,定义变量最好单个定义,自成语句,用C++编译器时需要在定义,不要一开始全定义了。
4,做for(;;)中循环变量最好用size_t类型,C 中就用int ,用double会出错。
5,定义数组一般要初始化,未赋值的变量最好不要用。
6,修改后为:
#include "stdio.h"
int main()
{
double a[100][100][10];
int b;
int c;
int d;

for(d=0; d<100; ++d)
for(b=0; b<100; ++b)
for(c=0; c<10; ++c)
输出语句;
return 0;
}
7,最后不知道你想输出什么,输出数组变量名为 printf("a[%d][%d][%d]",d,b,c);
输出数组变量值为 printf("%f ",a[d][b][c]);
8,用C++编译器时for语句可换为 for(int d=0; d<100; ++d) 前面定义的int d;省略,别的类似。
9,我学的C++ ,C 的知识也懂点,写这些希望对你学习编程有用。 7532希望对你有帮助!

参考资料:. imxuuuy

第2个回答  2019-11-11
运行已经成功
解释就在代码里面
有什么疑问的hi我
我们一起讨论研究
#include
#define
a
3
#define
b
5
double
aa(double
a[][b],int
x);//a改为x
因为a为宏定义
不能当作个变量
int
main(void)
{
double
a[a][b];
printf("请输入3*5的数!\n");
aa(a,a);
}
double
aa(double
a[][b],int
x)
{
//double
a,b;
/*你是要把a当作数组变量
而且怎么能是double型的呢
int型的就好了
比如你的地址为1,还要是1.0?
还是单纯的double变量呢
详细请看下c语言变量命名规范*/
int
i,b;
for(i=0;i
评论
0
0
加载更多
第3个回答  2019-07-08
运行已经成功
解释就在代码里面
有什么疑问的hi我
我们一起讨论研究
#include
#define
a
3
#define
b
5
double
aa(double
a[][b],int
x);//a改为x
因为a为宏定义
不能当作个变量
int
main(void)
{
double
a[a][b];
printf("请输入3*5的数!\n");
aa(a,a);
}
double
aa(double
a[][b],int
x)
{
//double
a,b;
/*你是要把a当作数组变量
而且怎么能是double型的呢
int型的就好了
比如你的地址为1,还要是1.0?
还是单纯的double变量呢
详细请看下c语言变量命名规范*/
int
i,b;
for(i=0;i
评论
0
0
加载更多