// testc13.cpp : 定義控制臺應用程式的入口點。
//
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
//NPC結構體的資訊
typedef struct _NPC
{
char name[20];
int nx, ny;
int nid;
}NPC;
typedef struct _NODE
{
NPC *data;
struct _NODE *pNext;
}NODE;
NODE *head;//鏈表頭結點
void addNode();
void queryNode(int nid);
void printNode();
void insertNodeAt(NODE *node, int index);
//列舉型別
enum SYSMENU
{
ADDNPC = 1, //添加
QUERY, //查詢
PRINT,
QUIT
};
int main()
{
enum SYSMENU input;
head = NULL;
while (1)
{
//顯示系統主選單
printf("\nNPC管理系統\n1.添加NPC \n2.查詢NPC \n3.列印所有NPC資訊 \n4.退出系統\n");
scanf_s("%d", &input);
//判斷用戶選中了哪一個選單項
switch (input)
{
case ADDNPC:
printf("\n您選中了 1,添加");
addNode();
break;
case QUERY:
printf("\n您選中了 2,查詢");
break;
case PRINT:
printf("\n您選中了 3,列印");
printNode();
break;
case QUIT:
printf("\n您選中了 4,退出");
exit(0);
break;
default:
break;
}
}
system("pause");
return 0;
}
void addNode()
{
//新節點
NODE *pNewNode = (NODE *)malloc(sizeof(NODE));
pNewNode->data = (NPC *)malloc(sizeof(NPC));
pNewNode->pNext = NULL;
//節點賦值
printf("請輸入NPC id name nx ny\n");
scanf_s("%d %s %d %d", &pNewNode->data->nid,
pNewNode->data->name,
&pNewNode->data->nx,
&pNewNode->data->ny);
if (head == NULL)
{
//直接添加節點
head = pNewNode;
}
else
{
//找到最后一個節點,添加
NODE *pNode;
pNode = head;
while (pNode->pNext!=NULL)
{
pNode = pNode->pNext;
}
pNode->pNext = pNewNode;
}
}
void queryNode(int nid)
{
}
void printNode()
{
NODE *pNode;
pNode = head;
while (pNode->pNext != NULL)
{
//列印節點資訊
printf("npc id=%d name=%s px,py=(%d %d)",
pNode->data->nid,
pNode->data->name,
pNode->data->nx,
pNode->data->ny);
pNode = pNode->pNext;
}
}
void insertNodeAt(NODE *node, int index)
{
}
uj5u.com熱心網友回復:
我在VS2015運行下列代碼,,輸入id,名字,x和y的時候,按順序輸入名字的時候崩潰,彈出錯誤提示uj5u.com熱心網友回復:
你自己Debug模式下單步除錯一下看看,哪里出錯了?uj5u.com熱心網友回復:
好像錯在輸入資料那里,但我不知道錯在什么原因。。。uj5u.com熱心網友回復:
單步斷點除錯,起碼先看看你輸入的資料,跟你程式得到的資料有沒有什么問題uj5u.com熱心網友回復:
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
//NPC結構體的資訊
typedef struct _NPC
{
char name[20];
int nx, ny;
int nid;
}NPC;
typedef struct _NODE
{
NPC *data;
struct _NODE *pNext;
}NODE;
NODE *head;//鏈表頭結點
void addNode();
void queryNode(int nid);
void printNode();
void insertNodeAt(NODE *node, int index);
//列舉型別
enum SYSMENU
{
ADDNPC = 1, //添加
QUERY, //查詢
PRINT,
QUIT
};
int main()
{
enum SYSMENU input;
head = NULL;
//
while (1)
{
//顯示系統主選單
printf("\nNPC管理系統\n1.添加NPC \n2.查詢NPC \n3.列印所有NPC資訊 \n4.退出系統\n");
scanf("%d", &input);
//判斷用戶選中了哪一個選單項
switch (input)
{
case ADDNPC:
printf("\n您選中了 1,添加\n");
addNode();
break;
case QUERY:
printf("\n您選中了 2,查詢\n");
break;
case PRINT:
printf("\n您選中了 3,列印\n");
printNode();
break;
case QUIT:
printf("\n您選中了 4,退出\n");
exit(0);
break;
default:
break;
}
}
system("pause");
return 0;
}
void addNode()
{
//新節點
NODE *pNewNode = (NODE *)malloc(sizeof(NODE));
pNewNode->data = (NPC *)malloc(sizeof(NPC));
pNewNode->pNext = NULL;
//節點賦值
printf("請輸入NPC id name nx ny\n");
scanf("%d %s %d %d", &pNewNode->data->nid,
pNewNode->data->name,
&pNewNode->data->nx,
&pNewNode->data->ny);
if (head == NULL)
{
//直接添加節點
head = pNewNode;
}
else
{
//找到最后一個節點,添加
NODE *pNode;
pNode = head;
while (pNode->pNext!=NULL)
{
pNode = pNode->pNext;
}
pNode->pNext = pNewNode;
}
}
void queryNode(int nid)
{
}
void printNode()
{
NODE *pNode;
pNode = head;
while (pNode)
{
//列印節點資訊
printf("npc id=%d name=%s px,py=(%d %d)\n",
pNode->data->nid,
pNode->data->name,
pNode->data->nx,
pNode->data->ny);
pNode = pNode->pNext;
}
}
void insertNodeAt(NODE *node, int index)
{
}
while (pNode)
uj5u.com熱心網友回復:
崩潰的時候在彈出的對話框按相應按鈕進入除錯,按Alt+7鍵查看Call Stack即“呼叫堆疊”里面從上到下列出的對應從里層到外層的函式呼叫歷史。雙擊某一行可將游標定位到此次呼叫的源代碼或匯編指令處,看不懂時雙擊下一行,直到能看懂為止。uj5u.com熱心網友回復:
你輸入的name有沒有超過20個char的長度uj5u.com熱心網友回復:
另外,你的scanf_s的用法也有錯誤,最后必須傳個整數,保證讀取的最大字符數。去看看scanf_s的用法
uj5u.com熱心網友回復:
http://bbs.csdn.net/topics/390946798uj5u.com熱心網友回復:
scanf_s改成scanf即可這鏈表寫的也是醉了
uj5u.com熱心網友回復:
scanf_s 在 %s 讀字串時, 需要傳入緩沖區長度轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/112517.html
標籤:基礎類
上一篇:如何在滾動視圖中,始終顯示滾動條
