不知不觉,这个系列已经写到第八篇了。
不过我当初写的那些习题也差不多完了。
今天想着给这个事琢磨着考虑个边界,于是,忙活了几个小时。
并把结果写在这个博客里。
https://home.eeworld.com.cn/my/space.php?uid=115166&do=blog&id=65957基本上,已经看到结束的边界了,这种感觉真好。
今天接下去的时间,我要把9.4弄好,摆上来。
这个程序写的真是够狗血的,是目前整理看到的最狗血的一个。
先贴我原来的版本,可以用,但是,那个子函数写的异常复杂,怎么着都该细分。
- /*practise 9.4*/
#include<stdio.h>
#include<stdlib.h>
#include<stdarg.h>
#include<string.h>
char *to_string(int count,double first,...);
void main()
{
printf("You value list is:\n");
printf("%s\n",to_string(7,1.45,4.58,6.5,12.45,3.67,12.67,4.02,0) );
}
char *to_string(int count,double first,...)
{
va_list pvar;
va_start(pvar,first);
int value = 0;
int index = 0;
int j = 0;
unsigned int length = 0;
static int num = 0;
char *presult = NULL;
presult = (char *)malloc(200 * sizeof(char));
char **plist = NULL;
plist = (char **)malloc(count * sizeof(char *) );
/*Specific for the first double*/
*(plist + index) = (char *)malloc(9 * sizeof(char));
value = int(100 * first);
do
{
if(j == 2)
*(*(plist + index) + j++) = '.';
else
{
*(*(plist + index) + j++) ='0'+ (value % 10);
value = value / 10;
}
}while(value != 0);
*(*(plist + index) + j) = '\0';
j = 0;
do
{
*(plist + ++index) = (char *)malloc(9 * sizeof(char));
if( (value = int(100 * va_arg(pvar,double)) ) != 0)
{
do
{
if(j == 2)
*(*(plist + index) + j++) = '.';
else
{
*(*(plist + index) + j++) ='0'+ (value % 10);
value = value / 10;
}
}while(value != 0);
*(*(plist + index) + j) = '\0';
}
j = 0;
}while(index != (count - 1) );
for(int i = 0;i < (count - 1);i++)
{
for(j = strlen(*(plist + i)) - 1;j >= 0;j--)/*事情的真相是,我把判断条件记反了,是条件为真,继续*/
*(presult + num++) = *(*(plist + i) + j);
if(i < count - 2)
*(presult + num++) = ',';/*小问题,最后多了一个逗号*/
}
*(presult + num) = '\0';
va_end(pvar);
return presult;
}