#include<iostream>
#include<string>
using namespace std;
int main()
{
int list[25],vote[25];
bool found;
int count,first,mid,last;
char condition;
double high = 0,total=0;
string searchitem,name[25],winner;
cout <<"How many names?" <<endl;
cin>>count;
cout <<" Enter the "<<count<< " candidates last name and the number of votes received " <<endl;
for (int i=0;i<count;i++)
{
cin >>name[i];
cin >> vote[i];
total = total+vote[i];
}
cout <<"Candidate names ,number of votes and their percentage of votes are ..."<<endl;
for (int i=0;i<count;i++)
{
cout << name[i]<<endl;
cout << vote[i]<<endl;
cout << (vote[i]*100)/total<<endl;
if(vote[i]>high)
{
high = vote[i];
winner = name[i];
}
}
cout << " The winner of the election is " << winner << endl;
cout << "Do you have anything more to do?y/n?" << endl;
cin >> condition;
while (condition=='y' || condition=='Y')
{
found = false;
cout<<"Enter name you want to search \n";
cin>>searchitem;
first=0;
last=count-1;
while ((first<=count)&&!found)
{
mid=(first+last)/2;
if (name[mid]==searchitem)
{
found=true;
total = total-vote[mid];
cout << "Enter the new number of votes for " << name[mid] << endl;
cin >> vote[mid];
total = total + vote[mid];
}
else if (name[mid]>searchitem)
{
last=mid-1;
}
else first=mid+1;
}
if (!found)
{
cout<<" Sorry that name was not found \n";
}
cout <<"Candidate names ,number of votes and their percentage of votes are ..."<<endl;
high = 0;
for (int i=0;i<count;i++)
{
cout << name[i]<<endl;
cout << vote[i]<<endl;
cout << (vote[i]*100)/total<<endl;
if(vote[i]>high)
{
high = vote[i];
winner = name[i];
}
}
cout << " The winner is " << winner << endl;
cout << "Do you have anything more to do?y/n? "<<endl;
cin >> condition;
}
}
好吧。现在我一直试图尝试这个,当涉及5个名字时,我能够改变第三个和第四个名字的投票并显示结果。 但是当我尝试搜索第一个,第二个和最后一个名字时,我的程序就停止了! 为什么会发生这种情况?一个解决方案可以帮助我节省时间,试图用手直接打破墙壁。
答案 0 :(得分:0)
while ((first<=count)&&!found)
应该是
while ((first<=last)&&!found)