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