[미해결] 학습 교류(6) - 더블 체인 테이블 삽입 부동점수

3545 단어
[문제설명] 이라는 책을 작성하면서 유니버설 쌍사슬표를 작성하는 과정에서 문제점을 발견했다. 다음에 말한 바와 같다.
소스 프로그램에서 제공하는 테스트 코드는 다음과 같습니다.
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include "dlist.h"

DListRet print_int(void *data)
{
	printf("%d ", (int)data);

	return DLIST_RET_OK;
}

int main(int argc, char **argv)
{
	int i = 0;

	DList *dlist = dlist_create();

	for(i = 0; i < 100; i++)	
	{
		assert(dlist_append(dlist, (void *)i) == DLIST_RET_OK);
	}
	for(i = 0; i < 100; i++)	
	{
		assert(dlist_prepend(dlist, (void *)i) == DLIST_RET_OK);
	}
	dlist_print(print_int, dlist);
	printf("
"); dlist_destroy(dlist); return 0; }

현재 문제는 삽입된 데이터 형식이 부동점형이라면, 예를 들어 0.01.0 2.0을 연속으로 삽입하고 싶다면...100.0, 어떻게 써야 합니까?
 
*float 형식의 데이터는void*형식으로 직접 변환할 수 없습니다.
 
내 생각은 포인터를 이용하여 전환하는 것이고 테스트는 정형이다. 아래와 같다.
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include "dlist.h"

DListRet print_int(void *data)
{
	printf("%d ", (int)data);

	return DLIST_RET_OK;
}

DListRet print_int2(void *data)
{
	printf("%d ", *(int*)data);

	return DLIST_RET_OK;
}

DListRet print_float(void *data)
{
	printf("%f ", *(float *)data);

	return DLIST_RET_OK;
}

int main(int argc, char **argv)
{
	int i = 0;
	int *pi = &i;
	float f = 2.5;
	float *pf = &f;
	float **pf2 = malloc(sizeof(float));

	DList *dlist = dlist_create();

	for(i = 0; i < 100; i++)	
	{
		assert(dlist_append(dlist, (void *)pi) == DLIST_RET_OK);
	}
	for(i = 0; i < 100; i++)	
	{
		assert(dlist_prepend(dlist, (void *)pi) == DLIST_RET_OK);
	}

	printf("i = %d, *pi = %d
",i,*pi); dlist_print(print_int2, dlist); printf("
"); dlist_insert(dlist, 10, (void *)pf); dlist_get_by_index(dlist, 10, (void **)pf2); print_float(*pf2); dlist_get_by_index(dlist, 20, (void **)pf2); print_int(*pf2); dlist_destroy(dlist); return 0; }

테스트 결과 출력은 다음과 같습니다.
100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 
2.500000 -1080211936 

전혀 내가 필요로 하는 결과가 아닌데, 누가 원인을 설명해 줄 수 있습니까?그렇다면 어떻게 부점형 데이터를 연속적으로 삽입합니까?본인이 먼저 고마웠어요.
[코드 다운로드]
http://download.csdn.net/detail/tandesir/4492717
 
 
 
 

좋은 웹페이지 즐겨찾기