該程序應打開一個txt文件,記錄兩個不同問題的答案,關閉文件,然後在一個名爲accumulatingFunction的函數中重新打開它,每個問題都可以被計算。當它再次打開時,C++覆蓋文本文件
我已經設法讓它工作,但我的問題是,當我關閉程序會有說,每個答案的3個實例,但是當我打開該程序並添加每個問題的答案時,它會仍然說我有3個這樣的答案。
我假設它已經寫過其中一個已經存在的答案,而且我不能爲我的生活弄清楚如何讓它停下來。 (另外,現在積累功能只是檢查每個問題的第一個答案,我想確保這是可能的,然後我加入其餘的部分,或者我認爲也許你們會有另一種方式來做到這一點。)
#include<iostream>
#include<string>
#include<fstream>
using namespace std;
double userInput = 0;
string ethnicityQuestion();
void validationFunction(int);
string politicalQuestion();
void accumulatingFunction();
//-----------------------------------------------------------------------------------------------
int main()
{
string ethnicityAnswer, politicalAffiliationAnswer, userID;
fstream answerFile;
answerFile.open("F:\\midTermFile.txt");
if (!answerFile)
cout << "You have a file read error" <<endl;
while (userID != "done")
{
ethnicityAnswer = ethnicityQuestion();
system("cls");
politicalAffiliationAnswer = politicalQuestion();
system("cls");
answerFile << ethnicityAnswer << endl;
answerFile << politicalAffiliationAnswer << endl;
cout << "you made it back to the main function and you chose " << ethnicityAnswer << " as your ethnicity\n"<< endl;
cout << "you made it back to the main function and you chose " << politicalAffiliationAnswer << " as your political affiliation\n"<< endl;
accumulatingFunction();
cout << "Please enter your user ID: ";
cin >> userID;
}
answerFile.close();
return 0;
}
//-----------------------------------------------------------------------------------------------
string ethnicityQuestion()
{
string ethnicity;
int selection = 6;
string A = "Native_American";
string B = "Asian";
string C = "African American";
string D = "Hispanic/Latino";
string E = "Caucasion";
string F = "Other";
cout << "What ethnicity do you claim?\n";
cout << "1. Native American\n";
cout << "2. Asian\n";
cout << "3. African American\n";
cout << "4. Hispanic/Latino\n";
cout << "5. Caucasion\n";
cout << "6. Other\n";
validationFunction(selection);
if (userInput == 1)
ethnicity = A;
else if (userInput == 2)
ethnicity = B;
else if (userInput == 3)
ethnicity = C;
else if (userInput == 4)
ethnicity = D;
else if (userInput == 5)
ethnicity = E;
else if (userInput == 6)
ethnicity = F;
return ethnicity;
}
//------------------------------------------------------------------------------------------------
string politicalQuestion()
{
string affiliation;
int selection = 6;
string A = "Very_Conservative";
string B = "Moderately Conservative";
string C = "Very Liberal";
string D = "Moderately Liberal";
string E = "Neither";
string F = "In the Middle";
cout << "On most political issues, which of the following do you associate with most:\n";
cout << "1. Very Conservative\n";
cout << "2. Moderately Conservative\n";
cout << "3. Very Liberal\n";
cout << "4. Moderatly Liberal\n";
cout << "5. Neither\n";
cout << "6. In the Middle\n";
validationFunction(selection);
if (userInput == 1)
affiliation = A;
else if (userInput == 2)
affiliation = B;
else if (userInput == 3)
affiliation = C;
else if (userInput == 4)
affiliation = D;
else if (userInput == 5)
affiliation = E;
else if (userInput == 6)
affiliation = F;
return affiliation;
}
//-----------------------------------------------------------------------------------
void validationFunction(int choiceAmount)
{
while ((!(cin >> userInput)) || (userInput > choiceAmount || userInput < 1))
{
cin.clear();
cin.ignore(INT_MAX, '\n');
cout << "Please enter a number between 1 and 6: ";
}
}
//------------------------------------------------------------------------------------------------
void accumulatingFunction()
{
string userAnswer;
double nativeAmerican = 0, veryConservative = 0;
ifstream countFile;
countFile.open("F:\\midTermFile.txt");
while (!countFile.eof())
{countFile >> userAnswer;
if (userAnswer == "Native_American")
nativeAmerican += 1;
else if (userAnswer == "Very_Conservative")
veryConservative += 1;
userAnswer = "";
}
cout << nativeAmerican << endl;
cout << veryConservative << endl;
countFile.close();
}
謝謝。它現在完美。 – kungfukyle987 2012-03-19 21:25:57