问题描述
我在另一个论坛上遇到的这个程序是一个投票程序,有人在编译时遇到了问题。给出的任何答案都与程序员想要的不符。所以在尝试自己编辑代码后,我在这里得到了一些有效的答案。
我当前遇到的问题是当我输入变量时,它仍然运行无限循环。在我投了 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;
}
解决方法
您的代码存在明显问题。 当你进入你的 for 循环:'for(i = 0; i >vote;' 当你得到投票如果 'vote
Fred Larson 说了我要说的基本内容。
我是堆栈溢出的新手,所以你认为我应该做什么,请告诉我。
,其他人已经评论过你的程序有什么问题,while 循环永远不会中断,因为 vote
永远不会更新,如果 vote
中的输入值为 <=5
,它将保持不变并最终成为一个无限的 while 循环。
for 循环中的 while 循环通常不是您想要的,应该仔细查看代码,看看这是否是您真的 想要。如果不是,请重构它以坚持其中之一,而不是两者。
您的问题似乎与此类似。从你的程序来看,你似乎想读取在 5 个投票站投票的票数,然后计算每个候选人获得(或浪费)的票数。
如果你走 for 循环路线,你只需要遍历循环,读入投票数(连同输入验证),执行 switch case,然后继续进行 for 循环的下一次迭代。
如果你走的是 while 循环路线,那么只要有一个 while 循环来读取五票,就像
while(std::cin>>vote) {
switch(...
做几乎相同的事情。
此外,全局变量(再次)usually 是个坏主意,尤其是当它们不是 const
时。将它们移到您的 main()
中。
另外,请注意 break
语句只会破坏最内层的循环。所以,做类似的事情
while(true) {
int x = 1;
switch(x) {
case 1:
break;
}
}
不会打破 while 循环。