2012-03-19 18 views
0

このプログラムは、txtファイルを開き、2つの異なる質問の回答を記録し、ファイルを閉じて、accumulatingFunctionという関数で再度開くようになっています。それぞれの質問を数えることができます。テキストファイルを開いたときにC++が上書きされる

私はそれを動作させることに成功しましたが、私の問題は、プログラムを終了すると、それぞれの回答が3つありますが、プログラムを開いて各質問の回答を1つ追加すると問題になります私はその答えの3つのインスタンスがあると言う。

私は既にそこにある答えの1つを上書きしていると仮定しており、私の人生ではそれを止める方法を理解できません。 (また、今、accumulatingFunctionは各質問の最初の答えをチェックするだけです。残りの部分を追加する前にこれが可能であることを確認したかったのでしょうか、それとも別の方法があると思いました)

#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に渡されないパラメータです。 2番目のパラメータとしてfstream::out | fstream::appを渡す必要があります。

the fstream::open referenceも参照してください。

main()でファイルを読み取っていないので、fstreamの代わりにofstreamを使用する必要があります。

+0

ありがとうございます。それは今、完璧に動作します。 – kungfukyle987

2

in引数を使用して2回目にファイルを開きます。

だから、この

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

編集するには、この

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

変更:私はあなたがそれを読んでいないファイルに追加しようと思っていた誤読質問を。

関連する問題