The Clouts
The Clouts

Reputation: 1

How do I access and read individual lines from files in C++?

I'm working on a final project for my C++ class. It is a multiple choice quiz in which the correct answers need to be checked by comparing the user's answer with the corresponding answer that is in an answer.txt that contains all 20 answers. Also the student's name and score needs to be in another textfile that will allow students to look at it to view their scores. The program, answer.txt and scores.txt PLUS two functions and whatever else you can use from what you have learned this class period need to be used.

I'm having trouble reading individual answers from the file answer.txt. I am trying to read one answer at a time and compare it to the answer the user inputted all within a function called check_answer. I am using integers instead of characters to allow me to easily check for upper and lowercase (by adding 32). The program compiles, but the only problem is that after I answer the first question, all of the other questions pop up with "You answered correctly!" and the program is finished running.

I am using DevC++. Below is the code for my program and the contents of the txt file answers.txt.

#include<iostream.h>
#include<fstream.h>
#include<string.h>

int total_correct = 0;
ifstream infile;

void name_prompt();
void check_answer();
void scores();

int main()
{
      name_prompt();

      cout << "\nGREAT WHITE SHARK TRIVIA\n";
      cout << "Enter the letter corresponding to the correct answer choice, then press enter.\n";

      cout << "\nQuestion 1\n" << "What is the Great White Shark's scientific name?\n";
      cout << "A. Hemipristis elongatus" << endl;    // Snaggletooth shark
      cout << "B. Odontaspis ferox" << endl;         // Smalltooth sand tiger
      cout << "C. Carcharodon carcharias" << endl;   // Great White Shark
      cout << "D. Oxynotus caribbaeus" << endl;      // Caribbean roughshark
      check_answer();

      cout << "\nQuestion 2\n" << "Carcharodon is a mix of two Greek words that translate in English to:\n";
      cout << "A. Ragged tooth" << endl;    
      cout << "B. Swift killer" << endl;        
      cout << "C. White fish" << endl; 
      cout << "D. Sea warrior" << endl;     
      check_answer();

      cout << "\nQuestion 3\n" << "How big do Great White Sharks grow?\n";
      cout << "A. Approximately 10 feet long" << endl;    
      cout << "B. Approximately 17 feet long" << endl;        
      cout << "C. Approximately 21 feet long" << endl; 
      cout << "D. Approximately 30 feet long" << endl;  
      check_answer();

      cout << "\nQuestion 4\n" << "What is the name of the organ on the Great White Shark that allows it to\nsense electromagnetic fields radiating from its prey?\n";
      cout << "A. Duodenom antennae" << endl;    
      cout << "B. Ampullae of Lorenzini" << endl;        
      cout << "C. Spiracle gland" << endl; 
      cout << "D. Dermal denticles" << endl;     
      check_answer();

      cout << "\nQuestion 5\n" << "How long do Great White Shark mothers stay with their young?\n";
      cout << "A. No time whatsoever" << endl;    
      cout << "B. 3 months" << endl;        
      cout << "C. 6 months" << endl; 
      cout << "D. 1 year" << endl;     
      check_answer();

      cout << "\nQuestion 6\n" << "How old are female Great Whites when they usually bear their first young?\n";
      cout << "A. 2-4 years" << endl;    
      cout << "B. 6-8 years" << endl;        
      cout << "C. 8-10 years" << endl; 
      cout << "D. 12-14 years" << endl;     
      check_answer();

      cout << "\nQuestion 7\n" << "What is the favorite prey of an adult Great White Shark?\n";
      cout << "A. Crustaceans" << endl;    
      cout << "B. Fish" << endl;        
      cout << "C. Plankton" << endl; 
      cout << "D. Sea mammals" << endl;     
      check_answer();

      cout << "\nQuestion 8\n" << "What is the tactic used by Great Whites to attack prey on the surface\nof the water?\n";
      cout << "A. Attack from the side" << endl;    
      cout << "B. Attack from below" << endl;        
      cout << "C. Jump out of the water and land on the desired target" << endl; 
      cout << "D. Wait until the surface prey dives and then attack" << endl;     
      check_answer();

      cout << "\nQuestion 9\n" << "After spotting surface prey from below, Great Whites swim upward and launch\nthemselves out of the water grabbing their prey. This is called: \n";
      cout << "A. Skipping" << endl;    
      cout << "B. Jumping" << endl;        
      cout << "C. Breaching" << endl; 
      cout << "D. Charging" << endl;     
      check_answer();

      cout << "\nQuestion 10\n" << "How do Great White Sharks consume their food?\n";
      cout << "A. Rip off chunks of meat and swallow them whole" << endl;    
      cout << "B. Chew thoroughly and swallow" << endl;        
      cout << "C. Hold in mouth, let saliva break it down, and then swallow" << endl; 
      cout << "D. Suck out bodily fluids and leave carcass" << endl;     
      check_answer();

      cout << "\nQuestion 11\n" << "Of the following, which is the best location to view Great White\nbreaching behavior?\n";
      cout << "A. Myrtle Beach, South Carolina" << endl;    
      cout << "B. Cape Cod, Massachusetts" << endl;        
      cout << "C. Oban, Scotland" << endl; 
      cout << "D. False Bay, South Africa" << endl;     
      check_answer();

      cout << "\nQuestion 12\n" << "On average, how many non-fatal Great White Shark attacks occur each year?\n";
      cout << "A. 2-3" << endl;    
      cout << "B. 3-4" << endl;        
      cout << "C. 8-10" << endl; 
      cout << "D. 15-20" << endl;     
      check_answer();

      cout << "\nQuestion 13\n" << "What is one of the main predators juvenille Great Whites have to watch out for?\n";
      cout << "A. Humboldt Squid" << endl;    
      cout << "B. Various Whale Species" << endl;        
      cout << "C. Lion's Mane Jellyfish" << endl; 
      cout << "D. Other Great White Sharks" << endl;     
      check_answer();

      cout << "\nQuestion 14\n" << "After eating a marine mammal (such as a seal or sea lion), a Great White\nShark can go how long without another large meal?\n";
      cout << "A. 3-4 days" << endl;    
      cout << "B. 1 week" << endl;        
      cout << "C. 2 weeks" << endl; 
      cout << "D. 1-2 months" << endl;     
      check_answer();

      cout << "\nQuestion 15\n" << "How fast can adult Great White Sharks swim?\n";
      cout << "A. Up to 64 mph" << endl;    
      cout << "B. Up to 43 mph" << endl;        
      cout << "C. Up to 20 mph" << endl; 
      cout << "D. Up to 14 mph" << endl; 
      check_answer();

      cout << "\nQuestion 16\n" << "The teeth of a Great White Shark can measure up to?\n";
      cout << "A. 0.5 in" << endl;    
      cout << "B. 1.0 in" << endl;        
      cout << "C. 2 in" << endl; 
      cout << "D. 2.5 in" << endl;         
      check_answer();

      cout << "\nQuestion 17\n" << "Great White Sharks have which of the following?\n";
      cout << "A. Acute hearing" << endl;    
      cout << "B. Good eyesight" << endl;        
      cout << "C. Keen sense of smell" << endl; 
      cout << "D. All of the above" << endl;     
      check_answer();

      cout << "\nQuestion 18\n" << "In addition to its normal function, a Great White Shark's liver helps it to:\n";
      cout << "A. Float" << endl;    
      cout << "B. Swim aerodynamically" << endl;        
      cout << "C. Sense prey" << endl; 
      cout << "D. All of the above" << endl;     
      check_answer();

      cout << "\nQuestion 19\n" << "Great White Sharks can detect tiny amounts of blood up to how far away?\n";
      cout << "A. 500 feet" << endl;    
      cout << "B. 1 mile" << endl;        
      cout << "C. 3 miles" << endl; 
      cout << "D. 5 miles" << endl;     
      check_answer();

      cout << "\nQuestion 20\n" << "Great White Shark's mouths contain up to how many teeth?\n";
      cout << "A. 50" << endl;    
      cout << "B. 100" << endl;        
      cout << "C. 200" << endl; 
      cout << "D. 300" << endl;     
      check_answer();

      scores();

      system("pause");
      return 0;
}

void name_prompt()
{
     char user_name[30];
     ofstream outfile;

     cout << "Please enter your name: ";
     cin.get(user_name, 30);

     outfile.open("SCORES.TXT", ios::out);

     if(!outfile)
      {
                 cout << "Error opening file.\n";
      }

      outfile << user_name << endl;
      outfile.close();
}

**void check_answer()
{
      ifstream infile;
      infile.open("ANSWERS.TXT", ios::in);

      if(!infile)
      {
                 cout << "Error opening file.\n";
      }

     int x, answer;

      cin >> x;

      infile >> answer;

      if(x == answer || x == (answer + 32))
      {
           cout << "You answered correctly!\n" << endl;
           total_correct++;
      } 
      else
      {
          cout << "You answered incorrectly.\n" << endl;
      }
      infile.close();
}**

void scores()
{
     ofstream outfile2;         
     int score;

     score = (total_correct * 5);

     outfile2.open("SCORES.TXT", ios::app);

     if(!outfile2)
      {
                 cout << "Error opening file.\n";
      }

      outfile2 << "You answered " << total_correct << " out of 20 questions correctly." << endl;
      outfile2 << "You earned a score of " << score << "%.\n";
      outfile2.close();

      cout << "Please see SCORES.TXT if you wish to view your results." << endl;
}

contents of "answers.txt":

C
A
C
B
A
D
D
B
C
A
D
A
D
D
B
D
D
A
C
D

Help would be very much appreciated. Thank you so much for taking the time to look at this!

Upvotes: 0

Views: 273

Answers (1)

Helstein
Helstein

Reputation: 330

I think the problem is that you are trying to read a character into an integer:

int x, answer;

cin >> x;

Basically cin >> x says "read an integer from standard input into x". The problem is that there's no integer in the stream, just a character. So the reading operation fails and that character is left in the stream. The next time you try to read the answer you end up reading the same character again and again.

First of all you should reconsider your choice of using integer to read the answer. Do you really need an integer for the purpose you want to achieve? You can use arithmetic operations with char too...

And a general advice: always separate the data from the code... In this case you should put the questions in a separate file. This will make your code more readable and easier to manage.

Upvotes: 1

Related Questions