![](/img/trans.png)
[英]Creating a switch statement with multiple digital inputs? (c++, mbed, nucleo)
[英]C++ Switch Statement inputs
我正在编写一个C ++程序,提示用户输入,然后跟踪输入的输入次数。 我目前正在使用do-while循环和switch语句。 我遇到问题的部分是switch语句。 我无法弄清楚如何记录输入的输入次数。 例如:
Enter Value: 4
Enter Value: 4
Enter Value: 4
Enter Value: 3
Enter Value: 3
//然后我希望程序能够知道并最终输出数字“4”和“3”的输入次数。 我想可能使用某种递增计数形式,但不是100%肯定。 谢谢!
您可能想要使用std::map<int,int>
。 这就是原因。
让我们看看替代方案,从明显的开始:
int count0;
int count1;
int count2;
int count3;
int count4;
...
switch(input) {
case 0: ++count0; break;
case 1: ++count1; break;
case 2: ++count2; break;
case 3: ++count3; break
case 4: ++count4; break;
}
这就是您所要求的:您评估输入,并跟踪特定输入的查看次数。 这种形式确实存在许多问题:
我们可以通过指定一个数组来减少变量数:
int count[5];
...
switch(input) {
case 0: ++count[0]; break;
case 1: ++count[1]; break;
case 2: ++count[2]; break;
case 3: ++count[3]; break;
case 4: ++count[4]; break;
}
这仍然会受到太多几乎但不完全相同的代码行的影响。 让我们试着摆脱switch语句:
int count[5];
...
++count[input];
啊,现在我们到了某个地方! 通过消除switch
语句,我们有一个易于维护的代码行。 但是如果用户(意外或恶意)进入6? 然后我们将增加count[6]
,这是不存在的。 这是一件坏事。 我们可以增加数组的大小:
int count[50000];
...
++count[input];
现在我们对用户是安全的。 如果他进入6,则不再发生坏事。 呃哦,如果用户输入51000呢? 我们将增加不存在的count[51000]
。 很明显,我们无法赢得这场比赛 - 对于我们选择的任何数字,用户可能会选择该数字加1。
即使我们能赢,我们仍然输了。 如果我们只是要求用户输入一些数字,那么我们将浪费其他49,997个条目。
幸运的是,C ++有一个我们可以使用的数据结构:
该数据结构称为地图:
std::map<int,int> count;
...
++count[input];
地图有点像数组,但以特殊方式增长。 只分配我们使用的条目,并自动分配我们使用的每个条目。
std::map<int, int> frequency;
int value_entered_by_user = f();
frequency[value_entered_by_user]++;
如果您的输入值范围有限,则可以使用数组。 数组的每个元素代表一个输入值。 在开始时将元素初始化为0,并在输入相应的输入值时递增相应的元素。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.