加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C Switch语句输入

发布时间:2020-12-16 10:18:50 所属栏目:百科 来源:网络整理
导读:我正在编写一个C程序,提示用户输入,然后跟踪输入的输入次数.我目前正在使用do-while循环和switch语句.我遇到问题的部分是switch语句.我无法弄清楚如何记录输入的输入次数.例如: Enter Value: 4Enter Value: 4Enter Value: 4Enter Value: 3Enter Value: 3 //
我正在编写一个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;
}

这就是您所要求的:您评估输入,并跟踪特定输入的查看次数.这种形式确实存在许多问题:

>每个替代方案需要一行源代码.当用户可以输入0到10,000之间的任何值时,这就成了问题!
>它有重复的,几乎相同的线条.
>它有许多变量,每个变量必须独立输入,但使用相同.

我们可以通过指定一个数组来减少变量数:

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呢?我们将增加不存在的计数[51000].很明显,我们无法赢得这场比赛 – 对于我们选择的任何数字,用户可能会选择该数字加1.

即使我们能赢,我们仍然输了.如果我们只是要求用户输入一些数字,那么我们将浪费其他49,997个条目.

幸运的是,C有一个我们可以使用的数据结构:

>可以将任意数字作为其范围,和
>节省空间(与大型浪费阵列相比).

该数据结构称为地图:

std::map<int,int> count;
...
++count[input];

地图有点像数组,但以特殊方式增长.只分配我们使用的条目,并自动分配我们使用的每个条目.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读