自己練習C碰到的問題
我想請教 我想用TPYE搜尋 "0"OR"1" 可以列出所有TYPE"0"OR"1"的所有資料
下列程式 只會跳出第一項 例如 我打"0" 他只會跳出第一個Frank的資料 並不是所有TYPE 0的資料
還請各位前輩指教提點小弟 我是剛入門的大學生 還在摸索 麻煩您~
#include "stdafx.h"
#include <Windows.h>
#pragma pack(1)
#define _CRT_SECURE_NO_WARNINGS
#pragma warning( disable : 4996 )
typedef struct Data_Tag Data_T;
struct Data_Tag
{
UINT32 ID;
UINT8 Type;
UINT8 Name[50];
Data_T* pNextData;
};
Data_T* pgData = NULL;
Data_T* AddData(UINT32 ID, UINT8 Type, CHAR* Name)
{
Data_T* pData = pgData;
Data_T* pPrevData = pData;
INT NameSize = strlen(Name);
while (pData)
{
pPrevData = pData;
pData = pData->pNextData;
}
pData = (Data_T*)malloc(sizeof(Data_T));
if (pData)
{
memset((void*)pData, 0x00, sizeof(Data_T));
pData->ID = ID;
strcpy((char*)pData->Name, Name);
pData->Type = Type;
if (pPrevData)
pPrevData->pNextData = pData;
if (pgData == NULL)
pgData = pData;
printf("ID:%d %s's pointer = 0x%08x\n", ID, Name, pData);
}
return pData;
}
void FreeAll()
{
Data_T* pData = pgData;
Data_T* pNextData;
while (pData)
{
pNextData = NULL;
if (pData->pNextData)
pNextData = pData->pNextData;
free(pData);
if (pNextData)
pData = pNextData;
else
break;
}
}
Data_T* SearchByID(UINT32 ID)
{
Data_T* pData = pgData;
while (pData)
{
if (pData->ID == ID)
break;
if (pData->pNextData)
pData = pData->pNextData;
else
pData = NULL;
}
return pData;
}
Data_T* SearchByType(UINT8 Type)
{
Data_T* pData = pgData;
while (pData)
{
if (pData->Type == Type)
break;
if (pData->pNextData)
pData = pData->pNextData;
else
pData = NULL;
}
return pData;
}
int _tmain(int argc, _TCHAR* argv[])
{
Data_T* pData;
char* Dummy[6];
UINT Number;
if (argc != 2)
{
printf("Usage: test2 [ID]\n");
return -1;
}
printf("Struct size = %d\n", sizeof(Data_T));
pData = AddData(24242, 0, "Frank");
Dummy[0] = (char*)malloc(231);
pData = AddData(98734, 1, "Vito");
Dummy[1] = (char*)malloc(23);
pData = AddData(48124, 0, "Amy");
Dummy[2] = (char*)malloc(11);
pData = AddData(88394, 1, "Eric");
Dummy[3] = (char*)malloc(24);
pData = AddData(535311, 0, "Oliver");
Dummy[4] = (char*)malloc(63);
pData = AddData(5554, 0, "Steven");
Dummy[5] = (char*)malloc(66);
printf("######### Search By ID or Type ###########\n");
if (pData = SearchByType(atoi(argv[1])))
{
printf("ID = %d\n", pData->ID);
printf("Type = %d\n", pData->Type);
printf("Name = %s\n", pData->Name);
printf("NextData Pointer = 0x%08x\n", pData->pNextData);
}
else if(pData = SearchByID(atoi(argv[1])))
{
printf("ID = %d\n", pData->ID);
printf("Type = %d\n", pData->Type);
printf("Name = %s\n", pData->Name);
printf("NextData Pointer = 0x%08x\n", pData->pNextData);
}
else
printf("Not Found\n");
printf("##################################\n");
int i;
for (i = 0; i < 6; i++)
{
free(Dummy);
}
FreeAll();
return 0;
}