2012-03-19 69 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); 

編輯:誤讀的問題,我還以爲你想添加到該文件無法讀取它。