亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? ioutilities.c

?? 通訊錄 C語言
?? C
字號:
#include "main.h"/*  =============================================================================== 	Author:		Hammer, May 2002, For www.cprogramming.com/cboard/ 	File:		ioUtilities.c 	Contents:	io_GetInt				io_EnterToContinue				io_GetYesNo				io_GetLine				io_WriteAllRecordsToFile				io_WriteRecordToFile				io_LoadAppConfig				io_SaveAppConfig  ===============================================================================*/static FILE *fp;/*  =============================================================================== 	Function: 	ioLoadPhoneBookFromFile    Args: 		Pointer to the node list     Returns: 	Pointer to the node list.    			NULL    Purpose:	Loads the Record structs from the phone book file into the List  ===============================================================================*/struct Node *io_LoadPhoneBookFromFile(struct Node *List){	struct Record	rec, *recptr;	struct Node		*tmpListPtr;	if ((fp = fopen(STR_FILENAME, "rb")) == NULL)	{	/* Failed to open database file */		printf("ERROR: Unable to open phone book file: %s\n", STR_FILENAME);		return(List);	}	if (List)	{	/* List not empty, kill it before we start reloading */		(void)li_Traverse(List, free);		List = li_Destroy(List);	}	while (fread(&rec, sizeof(struct Record), 1, fp) == 1)	{		if ((recptr = malloc(sizeof(struct Record))) == NULL)		{					/* Memory failure, don't do anymore */			perror("malloc");			break;		}		*recptr = rec;		if ((tmpListPtr = li_Insert(List, recptr, rec_Compare)) == NULL)		{			printf("Error performing insert on list.  Item not addded.\n");			free(recptr);	/* throw record away */		}		else		{			List = tmpListPtr;			recptr->ID = gl_HighestID;			recptr->Status = (unsigned char)0;		}	}	(void)fclose(fp);	gl_AppData.DataChanged = FALSE;	return(List);}/*  ===============================================================================    Function: 	io_GetInt    Args:		maximum number for user to choose    Returns: 	Number chosen, or -1 if x or X entered (for menu use)    Notes:		Assumes that 0 will never be a valid option, and will ask    			the user to re-enter.    Purpose:	Get an int from stdin (keyboard).  =============================================================================== */int io_GetInt(int Max){	int		Input, len;	char	buffer[BUFSIZ];	for (;;)	{		if ((len = io_GetLine(buffer, BUFSIZ, stdin)) != 0)		{			if (len == 1 && (buffer[0] == 'x' || buffer[0] == 'X'))			{	/* Allow for xX to be entered, and return -1 */				Input = RC_BAD;				break;			}			if ((Input = atoi(buffer)) != 0)			{				if (Input >= 1 && Input <= Max)				{					break;				}			}		}		printf("Invalid. Try again (1-%d, x to exit)>", Max);	}	return(Input);}/*  ===============================================================================    Function: 	io_EnterToContinue    Args: 		None    Returns: 	None    Purpose:	Simulates the good old DOS PAUSE  =============================================================================== */void io_EnterToContinue(void){	printf("---> Enter To Continue <---");	FLUSH_INPUT;}/*  ===============================================================================    Function: 	io_GetYesNo    Args: 		String containing the prompt to be displayed    Returns: 	TRUE if yY entered, FALSE if nN entered    Purpose:	Get a Y or N from stdin (keyboard)  =============================================================================== */bool_t io_GetYesNo(char *prompt){	int		c;	bool_t	rc;	for (;;)	{		printf("%s", prompt);		c = getchar();		switch (c)		{		case 'y':		case 'Y':			rc = TRUE;			break;		case 'n':		case 'N':			rc = FALSE;			break;		default:			if (c != '\n') FLUSH_INPUT;			continue;		}		break;	}	if (c != '\n') FLUSH_INPUT;	return(rc);}/*  ===============================================================================    Function: 	io_GetLine    Args: 		buffer to place the text    			length of the buffer    			file pointer to read from.    Returns: 	Chars read and placed into buffer    Purpose:	Same as fgets() but does not keep the newline character  =============================================================================== */int io_GetLine(char *buffer, int maxlen, FILE *fp){	int		len = 0, c;	char	*ptr = buffer;	char	*endptr = buffer + maxlen - 1;	if (fp != NULL)	{		while ((c = fgetc(fp)) != EOF)		{			if (c == '\n') break;			*ptr = c;			ptr++;			len++;			if (ptr == endptr) break;		}	}	*ptr = '\0';	return(len);}/*  ===============================================================================    Function: 	io_WriteAllRecordsToFile    Args: 		Pointer to list     Returns: 	Number of items written.    Purpose:	Save all Record structs in the List to a disk file  =============================================================================== */int io_WriteAllRecordsToFile(struct Node *List){	unsigned char	status = ST_DELETED;	if ((fp = fopen(STR_FILENAME, "wb")) == NULL)	{	/* Failed to open database file */		printf("ERROR: Unable to open phone book file: %s\n", STR_FILENAME);		return(0);	}	/* First delete dead records from the list, then write them to disk */	gl_AppData.MainList = li_DeleteNodeAndData(gl_AppData.MainList, &status, rec_CompareStatus);	(void)li_Traverse(List, io_WriteRecordToFile);	(void)fclose(fp);	gl_AppData.DataChanged = FALSE;	return(gl_HighestID);}/*  ===============================================================================    Function: 	io_WriteRecordToFile    Args: 		Pointer to record structure to be written.    Returns: 	Nothing    Purpose:	Sub-function to write a single Record struct to disk  =============================================================================== */void io_WriteRecordToFile(void *ptr){	struct Record	*rec = ptr;	if (rec->Status & ST_DELETED) return;	/* Don't save deleted records */	if (fp == NULL)	{		fprintf(stderr, "ERROR: Attempting to write to unopened file\n");		return;	}	if (fwrite(rec, sizeof(struct Record), 1, fp) != 1) perror("WriteRecordToFile");}/*  ===============================================================================    Function: 	io_LoadAppConfig    Args: 		None    Returns: 	Nothing    Purpose:	Loads the appconfig structure from disk  =============================================================================== */void io_LoadAppConfig(void){	FILE				*myfp;	struct appconfig	tmpcfg;	if ((myfp = fopen(STR_CFG_FILENAME, "rb")) == NULL) return;	if (fread(&tmpcfg, sizeof(struct appconfig), 1, myfp) == 1) gl_AppCfg = tmpcfg;	(void)fclose(myfp);}/*  ===============================================================================    Function: 	io_SaveAppConfig    Args: 		None    Returns: 	Nothing    Purpose:	Saves the appconfig structure to disk  =============================================================================== */void io_SaveAppConfig(void){	FILE	*myfp;	if ((myfp = fopen(STR_CFG_FILENAME, "wb")) == NULL) return;	if (fwrite(&gl_AppCfg, sizeof(struct appconfig), 1, myfp) != 1)		perror (STR_CFG_FILENAME);	(void)fclose(myfp);}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲影院理伦片| 蜜桃av噜噜一区| 亚洲国产一二三| 国产精品欧美一级免费| 亚洲另类中文字| 国产一区在线看| 日本丶国产丶欧美色综合| 精品捆绑美女sm三区| 国产精品久久福利| 蜜桃av噜噜一区| 99久久99久久久精品齐齐| 欧美一区二区三区爱爱| 国产免费观看久久| 国产精品美女www爽爽爽| 久久精品国产第一区二区三区| 成人国产精品免费观看视频| 在线观看亚洲精品| 中文字幕精品综合| 天堂一区二区在线| 欧洲一区二区三区在线| 久久综合成人精品亚洲另类欧美| 亚洲国产精品ⅴa在线观看| 久久66热偷产精品| 欧美综合视频在线观看| 国产精品美女一区二区三区| 午夜一区二区三区视频| 91欧美激情一区二区三区成人| 日韩免费视频线观看| 亚洲va欧美va国产va天堂影院| 高清视频一区二区| 久久一区二区三区国产精品| 热久久国产精品| 不卡一卡二卡三乱码免费网站| 日韩视频免费直播| 国产精品网站在线| 不卡一区中文字幕| 久久精品视频一区二区三区| 国产最新精品免费| 日韩欧美国产wwwww| 日本欧美一区二区三区乱码| 欧美图区在线视频| 午夜激情久久久| 色偷偷成人一区二区三区91| 国产精品国模大尺度视频| 精品亚洲国产成人av制服丝袜 | 在线欧美小视频| 欧美激情一区二区三区在线| 亚洲18色成人| 欧美日韩一区二区欧美激情| 亚洲日本在线看| 91蜜桃在线免费视频| 成人免费在线播放视频| 91麻豆福利精品推荐| 国产精品嫩草影院com| 色婷婷精品大在线视频| 自拍偷拍亚洲综合| 欧美日韩国产综合草草| 午夜精品久久久久久久久久 | 粉嫩蜜臀av国产精品网站| 国产日韩在线不卡| 粉嫩av一区二区三区| 日本一区二区三区在线不卡| 成人午夜碰碰视频| 欧美一区二区在线视频| 国产成人综合在线观看| 国产精品久久久久久亚洲毛片| 91国产免费看| 亚洲高清视频中文字幕| 久久久久久亚洲综合| 成人av电影在线网| 国产精品国产三级国产专播品爱网| 色偷偷88欧美精品久久久| 亚洲视频1区2区| 日韩精品专区在线| 国产成人免费在线观看不卡| 亚洲午夜在线视频| 欧美日韩国产综合草草| 国产一区二区三区免费在线观看| 国产精品麻豆欧美日韩ww| 不卡在线观看av| 午夜视频久久久久久| 欧美精品一区二区三区蜜桃| 欧美亚洲图片小说| 久久99久久久久久久久久久| 亚洲精品中文字幕在线观看| 91精品国产一区二区三区蜜臀| 成人性生交大片免费看在线播放| 亚洲国产精品精华液网站| 色诱视频网站一区| 国产成人精品www牛牛影视| 亚洲视频免费看| 精品日韩欧美在线| 91视频在线观看| 美国精品在线观看| 亚洲精品一二三四区| 日韩一区二区在线观看视频播放| 成人国产精品免费观看动漫| 国产精品天干天干在线综合| 在线成人av影院| 99精品国产99久久久久久白柏| 日本aⅴ亚洲精品中文乱码| 精品国产乱码91久久久久久网站| 色综合久久中文字幕综合网| 一卡二卡三卡日韩欧美| 国产精品国产三级国产aⅴ无密码| 欧美一级黄色片| 制服丝袜亚洲色图| 99久久精品国产毛片| 国产成人一级电影| 毛片不卡一区二区| 日韩va欧美va亚洲va久久| 亚洲人成网站色在线观看| 国产精品无码永久免费888| 日韩一区二区三区视频| 91精品欧美一区二区三区综合在| 成人精品一区二区三区四区| 国产91富婆露脸刺激对白| 美女一区二区在线观看| 日韩主播视频在线| 亚洲综合免费观看高清在线观看| 欧美日韩免费电影| 在线亚洲精品福利网址导航| 99视频一区二区| 色狠狠av一区二区三区| av激情综合网| 一本久久a久久免费精品不卡| 丁香五精品蜜臀久久久久99网站| 成人av小说网| 成人性生交大片免费看在线播放| www.久久精品| 91玉足脚交白嫩脚丫在线播放| 成人av集中营| 成人高清在线视频| 一本久久精品一区二区| 91精品福利在线| 欧美午夜精品电影| 欧美日韩国产一区二区三区地区| 在线免费观看成人短视频| 欧美一区在线视频| 日韩一级片网址| 精品国产一区a| 欧美激情一区二区三区四区| 国产精品嫩草影院com| 亚洲午夜电影在线| 午夜天堂影视香蕉久久| 精品一区二区综合| 极品瑜伽女神91| 成人国产一区二区三区精品| 99re这里只有精品首页| 欧美日韩高清一区二区| 日韩免费一区二区三区在线播放| 日本一区二区三区久久久久久久久不 | 国产精品一区二区久久不卡 | 国产老妇另类xxxxx| 丁香亚洲综合激情啪啪综合| 91视频在线观看| 在线精品视频免费播放| 在线观看一区不卡| 欧美tickle裸体挠脚心vk| 国产色婷婷亚洲99精品小说| 亚洲免费资源在线播放| 九九国产精品视频| 成人一区二区三区在线观看| 欧美精品第1页| 日本一区二区视频在线| 日本午夜一区二区| 麻豆91精品91久久久的内涵| voyeur盗摄精品| 3d动漫精品啪啪1区2区免费| 自拍偷拍欧美精品| 日本va欧美va瓶| 99久久免费精品| 91精品国产综合久久久久久漫画| 国产精品成人网| 青草av.久久免费一区| 在线视频一区二区免费| 久久在线免费观看| 亚洲成人先锋电影| 国产成人aaa| 4438x亚洲最大成人网| 欧美国产日本视频| 国模一区二区三区白浆| 在线免费不卡电影| 国产精品白丝在线| 视频一区中文字幕国产| 欧美中文字幕一区| 国产日韩精品视频一区| 久久精工是国产品牌吗| 一本大道久久精品懂色aⅴ| 国产精品丝袜黑色高跟| 日本va欧美va瓶| 欧美日本一道本| 国产日产欧美一区二区视频| 狠狠色丁香婷婷综合久久片| 色婷婷av一区二区三区软件| 欧美国产成人精品| 免费高清不卡av| 欧美性受xxxx| 亚洲第一福利一区| 99精品视频中文字幕|