// 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;
}
温馨提示:答案为网友推荐,仅供参考