使用 const 文字的初学者 C++ 投票程序

问题描述

我在另一个论坛上遇到的这个程序是一个投票程序,有人在编译时遇到了问题。给出的任何答案都与程序员想要的不符。所以在尝试自己编辑代码后,我在这里得到了一些有效的答案。

我当前遇到的问题是当我输入变量时,它仍然运行无限循环。在我投了 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 循环。