函数读取输入并运行函数两次
Function reads input and runs function twice
我正在处理程序中的一个函数来读取用户的输入,然后,该函数将检查该函数是否存在,然后运行它,但它非常有问题,并且函数打算运行两次。
//functions with a int and a string
std::map<std::string, std::function<void(int, string)>> functionsIS = {
{"printWordWithNumber", numberPlusWord},
};
//functions with no parameters
std::map<std::string, std::function<void()>> functionsNI = {
{"Help", userHelp},
};
void CommandCheck(std::string command){
int paramInt;
string paramString;
for (int i = 0; i < functionsIS.size(); i = i++){
if (functionsIS[command]){
std::cout << "Accessed '" << command << "' reading requirements..." << std::endl;
std::cout << "Enter paramater one (integer) : ";
std::cin >> paramInt;
std::cout << std::endl<<"Enter paramater two (string)" << std::endl;
std::cin.ignore();
std::getline(std::cin,paramString);
std::cout << "running..." << std::endl;
functionsIS[command](paramInt,paramString);
}
}
for (int i = 0; i < functionsNI.size(); i = i++){
if (functionsNI[command]){
std::cout << "Accessed '" << command << "' running..." << std::endl;
functionsNI[command]();
}
}
}
这是供您运行的版本:
在源代码中:
#include <iostream>
#include <map>
#include <windows.h>
#include <string>
#include <vector>
#include <map>
#include <functional>
#include "userFunctions.h"//header file for functions
using namespace std;
std::string input;
//functions with a int and a string
std::map<std::string, std::function<void(int, string)>> functionsIS = {
{ "printWordWithNumber", numberPlusWord },
};
//functions with no parameters
std::map<std::string, std::function<void()>> functionsNI = {
{ "Help", userHelp },
};
void CommandCheck(std::string command){
int paramInt;
string paramString;
for (int i = 0; i < functionsIS.size(); i = i++){
if (functionsIS[command]){
std::cout << "Accessed '" << command << "' reading requirements..." << std::endl;
std::cout << "Enter paramater one (integer) : ";
std::cin >> paramInt;
std::cout << std::endl << "Enter paramater two (string)" << std::endl;
std::cin.ignore();
std::getline(std::cin, paramString);
std::cout << "running..." << std::endl;
functionsIS[command](paramInt, paramString);
}
}
for (int i = 0; i < functionsNI.size(); i = i++){
if (functionsNI[command]){
std::cout << "Accessed '" << command << "' running..." << std::endl;
functionsNI[command]();
}
}
}
int main(){
do{
std::cout << "Waiting For Command..." << std::endl;
cin >> input;
CommandCheck(input);
} while (input != "end");
return 0;
}
创建一个名为"functions"的头文件并粘贴以下内容:
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
void numberPlusWord(int number, std::string word){
std::cout << word << std::endl;
std::cout << number << std::endl;
}
void userHelp(){
std::cout << "I can help!" << std::endl;
}
您的代码有几个问题会导致问题。首先是你正在迭代函数图,如果命令存在,你正在调用它。问题是您在每次迭代中都检查相同的命令,因此如果映射包含多个元素,则将为每个元素调用命令。您可以通过删除 for
循环并使用映射的 find
函数来确定命令是否存在来解决此问题。
第二个问题是,如果命令不存在,则会在映射中为其创建一个元素。下面的 if
语句将自动插入一个使用 command
作为键的元素。
if(functionsIS[command]) { /*...*/}
以下代码更新将更正此问题。
void CommandCheck(std::string command)
{
int paramInt;
string paramString;
if (functionsIS.find(command) != functionsIS.end())
{
std::cout << "Accessed '" << command << "' reading requirements..." << std::endl;
std::cout << "Enter paramater one (integer) : ";
std::cin >> paramInt;
std::cout << std::endl << "Enter paramater two (string)" << std::endl;
std::cin.ignore();
std::getline(std::cin, paramString);
std::cout << "running..." << std::endl;
functionsIS[command](paramInt, paramString);
}
else if (functionsNI.find(command) != functionsNI.end())
{
std::cout << "Accessed '" << command << "' running..." << std::endl;
functionsNI[command]();
}
}
相关文章:
- 为什么转换运算符调用复制构造函数两次,而等效函数只调用它一次
- 调用一个小函数两次(例如在if条件和主体中)比将结果存储在局部变量中更可取
- 调用某个回调函数两次会导致分段错误:Nan
- 执行函数两次
- 为同一存储位置调用构造函数两次是否合法?
- 为什么在下面的代码中调用复制构造函数两次
- 两个单链列表共享同一个节点和析构函数两次删除相同的内存
- 为什么在这里调用析构函数两次
- 为什么在此代码代码段中将复制构造函数两次称为两次
- boost ::适配器::转换为boost :: apapters ::过滤呼叫函数两次
- Linux 守护进程 - 运行函数两次
- const重载,而不必写入函数两次
- 为什么代码调用析构函数两次
- C++11 右值调用析构函数两次
- 函数读取输入并运行函数两次
- 在使用Nifty Counter C++Idiom时,必须调用构造函数两次
- 调用JNI_CreateJavaVM函数两次
- 插入 std::unordered_map 在 MSVC++ 的 STL 中调用哈希函数两次,设计不好还是特殊原因?
- 当我调用绑定的 c++ 类函数两次时出现 lua 错误?
- Gmock调用函数两次