循环工作不正常

For loop not working correctly

本文关键字:不正常 工作 循环      更新时间:2023-10-16

我需要for循环在程序中执行4次,然后在第四次退出并给出结果的总和。

它不应该将X视为破坏投票

三个总数和被破坏的票数被初始化为0。

下面是一个for循环,从1到投票站的数量。

这个循环中有一个while循环。屏幕上会出现一条提示信息,询问选民他或她想投票给哪个候选人。然后输入投票者的选择。

while循环中有一个switch语句,用于增加正确的总数。默认值选项用于计算损坏的票数。

当为选项输入X时,while循环将退出。

退出for循环时,将显示三个总数和损坏的票数。

这是我的代码

int main()
{
    const int NR_VOTING_STATIONS = 4;
    int votesForA, votesForB, votesForC, spoiltVotes;
    char vote;
    // initialise totals
    votesForA = 0;
    votesForB = 0;
    votesForC = 0;
    spoiltVotes = 0;
    // LOOP of INTEREST START
    //loop over the voting stations
    for ( int i = 1; i <= NR_VOTING_STATIONS; i++)
    {
        //loop over voters
        while (vote != 'X')
        {
            cout << "Vote for candidate A, B or C : " << endl;
            cin  >> vote;
            switch(vote)
            {
                  case 'A':
                       votesForA++;
                       break;
                  case 'B':
                       votesForB++;
                       break;
                  case 'C':
                       votesForC++;
                       break;
                  default:
                       spoiltVotes++;
            }                     
        }
    }
    // LOOP of INTEREST END
    //display results
    cout << endl  << endl;
    cout << "Total candidate A : " << votesForA   << endl;
    cout << "Total candidate B : " << votesForB   << endl;
    cout << "Total candidate C : " << votesForC   << endl;
    cout << "Total spoilt votes: " << spoiltVotes << endl; 
    system("pause");
    return 0;
}

感谢

只需添加switch:

case 'X':
    break;

因为while条件直到下一轮才会执行。

如果问题是

它不应该将X视为破坏投票

答案是添加一个案例:

case 'X':
     break;

此外,请小心首先初始化投票,或者使用do{}while()而不是while{}

如果你需要for循环执行四次,为什么不把它放在另一个for循环中呢?

在while循环中,您应该检查该轮询站中的Voters是否仍然可用。由于您在输入"X"处为中性,因此应将其添加为开关中的一种情况。

你的新while循环应该看起来像:

Voters_Still_Present = 1;
while (Voters_Still_Present)
    {
        cout << "Vote for candidate A, B or C : " << endl;
        cin  >> vote;
        switch(vote)
        {
              case 'A':
                   votesForA++;
                   break;
              case 'B':
                   votesForB++;
                   break;
              case 'C':
                   votesForC++;
                   break;
              case 'X':
                   //do nothing
                   break;
              default:
                   spoiltVotes++;
        }  
       /* Here, find out if voters are still available in the present station.
          If yes, Voters_Still_Present = 1; else  Voters_Still_Present = 0;
        */            
    }