【发布时间】:2021-07-18 02:12:07
【问题描述】:
我在另一个论坛上遇到的这个程序是一个投票程序,有人在编译时遇到问题。给出的任何答案都与程序员想要的不符。所以我在这里尝试自己编辑代码后得到一些有效的答案。
我目前遇到的问题是当我输入变量时,它仍然运行一个无限循环。在我输入 5 票之前,我没有正确地执行设计以执行哪些操作?
#include <iostream>
using namespace std;
const int ev = 5; //max. # of votes
int votesA = 0, votesB = 0, votesC = 0, spoiltvotes = 0; //total votes already initialized globally
int vote; //input variable
int main()
{
//loop over the voting stations
int i;
for(i = 0; i <= ev; i++)
{
//loop over the votes
cout << "Enter your vote: \t";
cin >> vote;
while(vote <= 5)
{
switch(vote)
{
case 1: votesA++;
break;
case 2: votesB++;
break;
case 3: votesC++;
break;
default: spoiltvotes++;
}
}
}
//display results neatly
cout << "# of votes for candidate A: \t" << votesA;
cout << "\n # of votes for candidate B: \t" << votesB;
cout << "\n # of votes for candidate C: \t" << votesC;
cout << "\n # of spoilt votes: \t" << spoiltvotes;
return 0;
}
更新结果:我已经修复了无限循环,但由于某种原因,循环仍在迭代 6 次而不是 5 次,这给了我大量的数字而不是个位数。
#include <iostream>
using namespace std;
int main()
{
const int ENDvote = 5; //max. # of votes
//loop over the voting stations
int vote;
int spoiltvotes;
for(vote = 0; vote >= ENDvote; vote++)
cout << "1. Candidate A\t 2. Candidate B\t 3. Candidate C" << endl;
{
//loop over the votes
cout << "Enter your vote: \t";
cin >> vote;
switch(vote)
{
case 1:
cout << "# of votes for candidate A:\t" << vote;
break;
case 2:
cout << "# of votes for candidate B:\t" << vote;
break;
case 3:
cout << "# of votes for candidate C:\t" << vote;
break;
default:
cout << "# of spoilt votes:\t" << spoiltvotes;
break;
}
}
return 0;
}
【问题讨论】:
-
内部循环会一直要求投票,直到用户输入一个大于
5的数字。我不认为你想要那个。事实上,我认为你根本不想要while循环。 -
这不是关于性能的输入,但在
cin >> vote;你不知道你从用户那里得到了一个值,但是你放手了。 -
for(i = 0; i <= ev; i++)实际上会迭代 6 次。您可能只想使用<。想你可能不知道,因为评论//max. # of votes暗示你想要 5 票,而不是 6 票。 -
内循环
while(vote <= 5)一旦开始就会永远持续下去,因为循环体中的任何代码都不能修改vote的值。 -
适当的缩进会让我们更容易看到发生了什么。
标签: c++ switch-statement constants literals