發新話題

[問題] 自己練習C碰到的問題

自己練習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;
}

TOP

發新話題

本站所有圖文均屬網友發表,僅代表作者的觀點與本站無關,如有侵權請通知版主會盡快刪除。