电话本--------分离命令和输入参数

原创 2013年12月05日 10:31:34
// 2.16.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <windows.h>
#include <string.h>

const unsigned int MAX_LENGTH_OF_CMD = 300;
const char* DEFAULT_FILE_NAME = "temp.txt";

/*
strDefaultFileFullPath要确保足够的存储空间,建议为MAX_PATH
*/
bool GetDefaultFileFullPath(char *strDefaultFileFullPath, const char *strDefaultFileName, const char *strArgv0)
{
	int i = strlen(strArgv0) - 1;
	while(i >= 0)
	{
		if(strArgv0[i] == '\\')
			break;

		i--;
	}

	if(i < 0)
	{
		strcpy(strDefaultFileFullPath, strDefaultFileName);
	}
	else
	{
		strcpy(strDefaultFileFullPath, strArgv0);
		strcpy(strDefaultFileFullPath + i + 1, strDefaultFileName);
	}

	return true;
}

void DisplayDefaultFile(const char *strDefaultFileFullPath)
{
	FILE *fp = fopen(strDefaultFileFullPath, "r+");
	if(fp != NULL)
	{
		while(1)
		{
			char buf[MAX_PATH];
			if(fgets(buf, MAX_PATH, fp) == NULL)
				break;

			printf("%s", buf);
		}

		fclose(fp);
	}
	else
	{
		printf("Default file does not exist.\n");
	}
}

void EnterCommandLoop()
{
	char cmd[MAX_LENGTH_OF_CMD];

	while(1)
	{
		printf("Please input your command : ");

		if(scanf("%[^\n]", cmd) == 0)
		{
			fflush(stdin);
			continue;
		}

		fflush(stdin);

		//所有命令头只有3个字符,将第三个字符串赋值为‘\0’
		cmd[3] = 0;

		printf("Your command is : %s\n", cmd);

		if(strcmp(cmd, "-ld") == 0)
		{
			printf("will import phone book\n");

			char file[MAX_PATH];
			strcpy(file, cmd + 4);

			printf("Load file needed is: %s\n", file);
			continue;
		}

		if(strcmp(cmd, "-sa") == 0)
		{
			printf("will export phone book\n");
			continue;
		}

		if(strcmp(cmd, "-se") == 0)
		{
			printf("will save phone book\n");
			continue;
		}

		if(strcmp(cmd, "-ad") == 0)
		{
			printf("will add item(name phone)\n");
			continue;
		}

		if(strcmp(cmd, "-qt") == 0)
		{
			printf("quit now ....\n");
			break;
		}
	}
}

int _tmain(int argc, _TCHAR* argv[])
{
	char DefaultFileFullPath[MAX_PATH];
	GetDefaultFileFullPath(DefaultFileFullPath, DEFAULT_FILE_NAME, argv[0]);

	printf("Default file path: %s\n", DefaultFileFullPath);

	DisplayDefaultFile(DefaultFileFullPath);

	EnterCommandLoop();

	return 0;
}

电话本------改进值分离命令和参数

通过cmd[3]=0、strcpy(file, cmd + 4)实现命令的解析,比较诡异。 必须要知道命令头只有三个字节的秘密 若将来命令格式发生变化,麻烦大了 只有在while循环中改动,除了要理解...
  • wuxinliulei
  • wuxinliulei
  • 2013年12月05日 10:52
  • 685

命令行传递给批处理的参数

命令行传递给批处理的参数 %0 批处理文件本身 %1 第一个参数 %9 第九个参数 %* 从第一个参数开始的所有参数 批参数(%n)的替代已被增强。您可以使用以下语法:       %~1   ...
  • zhaoyaoxing
  • zhaoyaoxing
  • 2013年09月25日 13:54
  • 15898

linux下命令执行结果作为其他命令输入参数

1. 通过ps命令获取对应程序的pid 比如这里要获取redis-server这个进程的pid # ps -ef | grep redis-server root 60415 1...
  • a515983690
  • a515983690
  • 2016年06月01日 10:56
  • 6261

DOS电话本(数组的练习)

/** *电话本 * · 实现功能: * · 请输入要选择的功能: * 1. 新增一个联系人 * 2. 查找指定的联系人 * ...
  • sinat_31801607
  • sinat_31801607
  • 2017年03月09日 10:22
  • 445

c++笔记,输出从命令行接收的参数

接收命令行参数: 该程序只输出从命令行接收的参数。 //--------------------------------------【程序说明】----------------------------...
  • qq_27605099
  • qq_27605099
  • 2017年01月12日 18:04
  • 689

VS2013中带命令行参数的调试方法

VS2013带命令行参数的调试方法在C++函数参数传递中,我们知道,main函数是演示C++程序如何向函数传递数组的好例子。一般来说,我们定义的的大多main函数都只有空的形参列表:Int main...
  • qq76536257
  • qq76536257
  • 2016年01月26日 22:25
  • 7605

控制台中解析用户输入的命令行参数(argc argv)

控制台中解析用户输入的命令行参数(argc argv) 分类: QT编程2011-01-26 11:02 556人阅读 评论(0) 收藏 举报 commandnullbufferc...
  • oMingZi12345678
  • oMingZi12345678
  • 2014年03月30日 12:39
  • 1662

命令查询职责分离(CQRS)模式

http://www.cnblogs.com/yangecnu/p/Introduction-CQRS.html在常用的三层架构中,通常都是通过数据访问层来修改或者查询数据,一般修改和查询使用的是相同...
  • cnlht
  • cnlht
  • 2017年02月18日 02:26
  • 781

Nmon命令行:Linux系统性能的监测利器

如果你眼下正在寻找一款非常易于使用的Linux性能监测工具,那么我强烈推荐安装和使用Nmon命令行实用工具。 Nmon监测工具 Nmon是一款面向系统管理员的调优和基准测量工具,可...
  • wzyzzu
  • wzyzzu
  • 2015年12月22日 14:37
  • 878

java实现简单电话本

电话本 · 实现功能: · 请输入要选择的功能: 1. 新增一个联系人 2. 查找指定的联系人 3. 查找所有的联系人 4. 退出系统 功能要求: 1、新增一个联系人,联系人的姓名,性别,年龄,手机...
  • mvp_dong
  • mvp_dong
  • 2017年03月03日 21:25
  • 1145
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:电话本--------分离命令和输入参数
举报原因:
原因补充:

(最多只允许输入30个字)