2012-03-19 71 views
0

该程序应打开一个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(); 
} 

回答

2

你的问题是你没有传递给fstream :: open的参数。您必须通过fstream::out | fstream::app作为第二个参数。

另请参阅the fstream::open reference

此外,由于您未从main()中的文件中读取,您应该使用ofstream而不是fstream

+0

谢谢。它现在完美。 – kungfukyle987 2012-03-19 21:25:57

2

第二次使用in参数打开文件。

所以改变这种

countFile.open("F:\\midTermFile.txt"); 

这个

countFile.open("F:\\midTermFile.txt", fstream::in | fstream::app); 

编辑:误读的问题,我还以为你想添加到该文件无法读取它。