我的程序差不多完成了(这是我在亚马逊上的c ++书中的作业),但最后一部分是显示选举的胜利者。我从来没有读过文本文件中的信息之前做过这个。如果有人能指引我朝着正确的方向前进,我将非常感激。 (如果我的代码不正确,请告诉我如何改进它。)
文字文件
Johnson 5000
Miller 4000
Duffy 6000
Robinson 2500
Ashtony 1800
CODE
/*Description: Reads data from text file, which has the number of votes each candidate received.
Then calculates the total number of votes and get each candidates percentage of total votes. Finally displays the winner of election.
*/
//Libraries
#include <iostream>
#include <string>
#include <fstream>
#include <iomanip>
using namespace std;
int main() {
//Reads input text file name "votes.txt"
ifstream theFile("votes.txt");
//Variables
string name;
string winner;
int votes;
double percent;
int total=0;
//Sets console to two decimal places
cout << fixed << setprecision(2);
//Output column header to console
cout << left << setw(20) << "CANDIDATE";
cout << right << setw(20) << "VOTES RECEIVED";
cout << right << setw(30) << "% OF TOTAL VOTES\n";
cout << string(80, '-') << endl;
//Loops text file till cursor reads null
while (theFile >> name >> votes ) {
//Equations
//Made votes a double in order to get a decimal instead of a whole number
percent = ((double)votes * 100) / 19300;
total += votes;
//Outputs result in console
cout << left << setw(20) << name << right << setw(15) << votes << right << setw(28) << percent << endl;
}
//Outputs total to console
cout << left << setw(20) << "Total" << right << setw(16) << total << "\n" <<endl;
//Winner of the election
cout << "The Winner of the election is" << winner << endl;
//End program
return 0;
}
答案 0 :(得分:1)
一个非常明显的缺陷是你的代码已经知道投票的总票数,19300。因此,它只适用于这个输入数据,而不是其他。一个明显的缺点。
正确的解决方案应该没有对数据的预先知识,而是能够产生正确的答案,无论有多少候选人和总投票数(忽略了一个非常明显的领带边缘情况,这肯定是出局的范围在这里)。
预期的解决方案是提前将所有数据读入std::vector
。完成后,要么加上投票数来计算投票的总票数,要么在读取输入数据时这样做。在任何情况下,一旦读取并存储了所有数据,再次浏览所有数据,现在计算每个候选人的投票数百分比(占总数的百分比)。
至于确定获胜者,应该通过找到票数最多的候选人,而不是通过比较百分比来完成;再次,一个相当简单的计算机科学101型问题。
初学者遇到的一个非常常见的问题就是尝试一次编码所有内容。不可避免的是,第一次尝试会有几个错误。关于错误的问题是,错误数量是错误的两倍并不意味着它通常需要两倍的时间来修复它们。
相反,你应该做的第一件事就是编写将所有输入数据读入矢量的代码,仅此而已。在验证它是否正常工作之后,下一步是编写计算投票总数的步骤。在确认这也能正常工作之后,最后通过实施计算每个候选人百分比的部分来完成计划,并确定获胜者。