C++实现,简单的命令行交互框架

在这里插入图片描述

目录

  • 背景


背景

在实际开发中,经常需要有对端测试程序,配合自己的程序,验证功能、逻辑等。面对繁杂、多变的需求,如果对端程序设计得不够灵活,则无法提升工作效率,如果能够与对端程序交互,通过命令行输入命令的方式完成测试验证,将大大提升工作效率,下面的示例程序是一个简单的命令行交互框架,各位小伙伴可以根据自己的需求添加命令即可,如果对你有帮助,请点赞、收藏,谢谢!

#include <iostream>  
#include <string>  
#include <vector>  
#include <sstream>  /* 假设的命令处理函数 */  
void commandHelp() {  std::cout << "Available commands:\n"  << "  help - Display this help message\n"  << "  echo <arg> - Echo the argument back to you\n"  << "  quit - Exit the program\n";  
}  void commandEcho(const std::string& arg) {  std::cout << "Echo: " << arg << std::endl;  
}  /* 主命令处理函数 */  
void processCommand(const std::string& command, const std::vector<std::string>& args) {  if (command == "help") {  commandHelp();  } else if (command == "echo") {  if (args.empty()) {  std::cout << "Error: 'echo' requires an argument\n";  } else {  commandEcho(args[0]);  }  } else if (command == "quit") {  std::cout << "Exiting the program...\n";  exit(0);  } else {  std::cout << "Unknown command: " << command << std::endl;  }  
}  /* 解析命令行参数 */ 
std::vector<std::string> parseArguments(const std::string& line) {  std::istringstream iss(line);  std::string token;  std::vector<std::string> args;  while (std::getline(iss, token, ' ')) {  if (!token.empty()) {  args.push_back(token);  }  }  return args;  
}  int main() {  std::string commandLine;  while (true) {  std::cout << "> ";  std::getline(std::cin, commandLine);  if (commandLine.empty()) {  continue;  }  std::vector<std::string> args = parseArguments(commandLine);  if (args.empty()) {  continue;  }  std::string command = args[0];  args.erase(args.begin()); /* 移除命令本身,只保留参数 */  processCommand(command, args);  }  return 0; /* 这行代码实际上永远不会被执行,因为我们在'quit'命令中调用了exit() */  
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/23716.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

嵌入式系统错误处理与日志记录

在嵌入式系统中&#xff0c;错误处理和日志记录是确保系统稳定性和可维护性的关键组成部分。有效的错误处理策略可以减少系统故障&#xff0c;而详尽的日志记录可以帮助开发者快速定位问题原因。本文将探讨嵌入式系统中的错误处理机制和日志记录策略&#xff0c;并提供相应的代…

Spring Cloud 微服务集成Sentinel实现服务熔断降级

文章目录 一、前言二、技术思路及方案2.1 实现思路2.2 实现方案2.2.1 nacos动态数据源实现类关系图 三、功能实现3.1 快速集成方案3.1.1 引入依赖3.1.2 服务端熔断降级3.1.3 feign调用降级 四、扩展4.1 SPI机制4.2 自定义Slot实现4.3 基于 Sentinel 实现 Feign 全局异常兜底4.3…

ubuntu, esp-idf, arduino

1&#xff0c; 把 esp-idf 文件夹拷贝到 ubuntu&#xff0c; 不是拷贝 zip。 这样做是为了在 ubuntu 里能检测到 git 2&#xff0c; 把 esp-idf 里的 hello-world 拷贝出来 3&#xff0c; 在 hello-world 里建立文件夹 components, 把 arduino 文件夹拷贝进去 esp-idf 和 ar…

Html5如何播放hls格式的视频

目录 一、什么情况下需要播放 二、hls的原理 1、 切片 2、编码 3、分发 4、M3U8文件 5、客户端请求 6、动态码率调整 7、缓存 8、实时性 三、方法一&#xff1a;使用hls.js播放 四、方法二&#xff1a;使用video.js播放 一、什么情况下需要播放 当前端需要嵌入设备视…

[数组] 子数组最大平均数

给你一个由 n 个元素组成的整数数组 nums 和一个整数 k 。 请你找出平均数最大且 长度为 k 的连续子数组&#xff0c;并输出该最大平均数。 任何误差小于 10-5 的答案都将被视为正确答案。 示例 1&#xff1a; 输入&#xff1a;nums [1,12,-5,-6,50,3], k 4 输出&#xff…

操作系统教材第6版——个人笔记5

3.2 单连续分区存储管理 3.2.1 单连续分区存储管理 单连续分区存储管理 每个进程占用一个物理上完全连续的存储空间(区域) 单用户连续分区存储管理固定分区存储管理可变分区存储管理 单用户连续分区存储管理 主存区域划分为系统区与用户区设置一个栅栏寄存器界分两个区域…

每日题库:Huawe数通HCIA——13

所有资料均来源自网络&#xff0c;但个人亲测有效&#xff0c;特来分享&#xff0c;希望各位能拿到好成绩&#xff01; PS&#xff1a;别忘了一件三连哈&#xff01; 今日题库&#xff1a; 186. 下列协议中属于动态IGP路由协议的是&#xff1f;-单选 A.stA.tiC. B.OSPF c…

使用Django Channels和WebSocket构建聊天应用

一、引言 WebSocket提供了一种在客户端和服务器之间进行实时双向通信的方式。结合Django Channels&#xff0c;我们可以轻松地在Django项目中实现WebSocket功能。本文将通过一个简单的聊天应用示例&#xff0c;展示如何使用Django Channels和WebSocket。 二、环境搭建 项目的…

Nacos的下载使用

下载 本地Java8Maven环境 下载地址 https://github.com/alibaba/nacos/releases使用 解压安装包&#xff0c;直接运行bin目录下的startup.cmd 账号密码都是nacos

maven 本地打包

文章目录 1. 简介Maven和POM的基本概念本地打包的意义和场景 2. Maven POM 文件结构POM 文件的基本结构重要的POM元素介绍 3. Maven 本地打包的关键配置spring-boot-maven-pluginmaven-surefire-plugin的作用和配置如何配置和使用Maven Surefire插件skip 页签 maven-compiler-p…

Win32和c++11多线程

Win32和c11多线程 一、概念1.线程的特点线程内核对象线程控制块线程是独立调度和分派的基本单位共享进程的资源 2.线程的上下文切换引起上下文切换的原因 3.线程的状态 二、Windows多线程API1.CreateThread创建线程2.获取线程ID3.关闭线程句柄4.挂起线程5.恢复线程6.休眠线程的…

算法金 | 读者问了个关于深度学习卷积神经网络(CNN)核心概念的问题

​大侠幸会&#xff0c;在下全网同名[算法金] 0 基础转 AI 上岸&#xff0c;多个算法赛 Top [日更万日&#xff0c;让更多人享受智能乐趣] 读者问了个关于卷积神经网络核心概念的问题&#xff0c;如下&#xff0c; 【问】神经元、权重、激活函数、参数、图片尺寸&#xff0c;卷…

手机相册的排列方式探讨

不论你是不是程序员&#xff0c;你一定留意过一个问题&#xff1a;相册 App 基本都将图片裁剪成了居中的 1:1 正方形。那么手机相册 App&#xff0c;为什么要将图片切割成 1:1 正方形&#xff0c;然后以网格排列&#xff1f;是行业标准吗&#xff1f; 自适应图片宽度的图库&a…

vscode 离线下载指定版本插件和安装方法

1、背景 由于不同的vscode版本需要安装对应的插件版本&#xff0c;一般情况下&#xff0c;vscode版本会落后于vscode插件库提供的可以下载的插件版本&#xff0c;网页一般只会提供最新的插件下载版本&#xff0c;因此我们需要下载指定的版本需要采取一些措施。 2、获取需要安…

c语言速成系列指针上篇

那么这一篇文章带大家学习一下c语言的指针的概念、使用、以及一些注意事项。 指针的概念 指针也就是内存地址&#xff0c;指针变量是用来存放内存地址的变量。就像其他变量或常量一样&#xff0c;您必须在使用指针存储其他变量地址之前&#xff0c;对其进行声明。 大白话讲解…

【数据集划分】oracle数据集划分(总结版)

【数据集划分】假如你有接近百万条oracle数据库数据&#xff08;成真版&#xff09; 写在最前面最终代码原理&#xff1a;生成随机索引并打乱顺序示例作用应用场景 遇到报错&#xff1a;ORA-01795&#xff0c;通过CTE&#xff08;Common Table Expressions&#xff09;和窗口函…

npm:Node.js包管理器的使用指南

一、引言 npm&#xff08;Node Package Manager&#xff09;是Node.js的官方包管理工具&#xff0c;它不仅仅是一个包管理器&#xff0c;更是一个完整的生态系统。npm允许开发者分享和重用代码片段&#xff0c;这些代码片段被称为“包”或“模块”。本文将详细介绍npm的使用场景…

Next.js Tailwind CSS UI组件

摘要&#xff1a; 官网 今天公司使用到一个前端ui框架——Next.js Tailwind CSS UI组件&#xff01;这从头构建一个AI驱动的前端UI组件生成器&#xff0c;生成Next.js Tailwind CSS UI组件&#xff1a; 1、用Next.js、ts和Tailwind CSS构建UI组件生成器Web应用程序。 2、用Copi…

Ansible——command 模块

目录 基本用法 指定主机 指定用户 指定不同的清单文件 通过sudo执行 使用更多的模块参数 1.使用特定的模块参数&#xff0c;例如chdir&#xff1a; 2.使用creates和removes参数&#xff1a; creates参数 removes参数 并发控制 详细输出 例外处理 基本语法 常用参…

08-指针与数组的结合——数组指针与指针数组的区别

指针与数组的结合 示例 1:指针访问数组元素 通过指针访问数组元素的例子&#xff1a; #include <stdio.h>int main() {int arr[5] {1,2,3,4,5};//int *p1 &arr;int *p1 (int *)&arr; // 需要强制类型转换int *p2 arr;printf("*p1:%d\n", *(p1 …