๐ Scenario: You have a text file named data.txt that contains a list of names, one per line. You want to read these names into your C++ program to process them.
๐ฏ Goal: Build a simple C++ program that reads all names from data.txt using ifstream and stores them in a vector.
๐ What You'll Learn
Create an ifstream object to open data.txt
Check if the file opened successfully
Read each line (name) from the file into a std::string
Store all names in a std::vector<std::string>
Print all names after reading
๐ก Why This Matters
๐ Real World
Reading data from files is common in many programs, such as loading user lists, configuration settings, or logs.
๐ผ Career
Understanding file input with <code>ifstream</code> is essential for software developers working with data files, system utilities, or any application that processes external data.
Progress0 / 4 steps
1
Create an ifstream object to open the file
Write a line of code to create an std::ifstream object named inputFile that opens the file "data.txt".
C++
Hint
Use std::ifstream followed by the variable name and the filename in parentheses.
2
Check if the file opened successfully
Add an if statement to check if inputFile is open. If not, print "Failed to open file." and return 1.
C++
Hint
Use inputFile.is_open() to check if the file opened.
3
Read each line from the file into a vector
Declare a std::vector<std::string> named names. Use a std::string variable line and a while loop with std::getline(inputFile, line) to read each line and add it to names.
C++
Hint
Use std::getline inside a while loop to read each line.
4
Print all names read from the file
Use a for loop with const std::string& name to iterate over names and print each name on its own line.
C++
Hint
Use a range-based for loop to print each name.
Practice
(1/5)
1. What is the primary purpose of ifstream in C++?
easy
A. To write data to a file
B. To read data from a file
C. To create a new file
D. To delete a file
Solution
Step 1: Understand the role of ifstream
ifstream stands for input file stream and is used to read data from files.
Step 2: Differentiate from other file streams
ofstream is used for writing, not reading. Creating or deleting files is not handled by ifstream.
2. Which of the following is the correct way to open a file named data.txt for reading using ifstream?
easy
A. ifstream file = open("data.txt");
B. std::ifstream file.open("data.txt");
C. std::ifstream file("data.txt");
D. ifstream file("data.txt").open();
Solution
Step 1: Recall correct syntax for opening files with ifstream
The correct way is to create an ifstream object and pass the filename as a constructor argument: std::ifstream file("data.txt");
Step 2: Identify incorrect syntax in other options
std::ifstream file.open("data.txt"); incorrectly uses dot notation with constructor. ifstream file = open("data.txt"); uses a non-existent open function. ifstream file("data.txt").open(); tries to call open() after constructor incorrectly.
Final Answer:
std::ifstream file("data.txt"); -> Option C
Quick Check:
Constructor with filename = correct open [OK]
Hint: Use constructor with filename to open file [OK]
Common Mistakes:
Calling open() on constructor line
Using open() as a free function
Mixing syntax of ifstream and other file functions
3. What will be the output of the following code if the file numbers.txt contains the numbers 10 and 20 on separate lines?
std::ifstream file("numbers.txt");
int a, b;
file >> a >> b;
std::cout << a + b << std::endl;
file.close();
medium
A. 30
B. 1020
C. 10 20
D. Compilation error
Solution
Step 1: Understand file reading with >> operator
The code reads two integers from the file into variables a and b. The file contains 10 and 20 on separate lines, so a=10 and b=20.
Step 2: Calculate the output of the sum
The code outputs a + b, which is 10 + 20 = 30.
Final Answer:
30 -> Option A
Quick Check:
10 + 20 = 30 [OK]
Hint: >> reads values; sum them for output [OK]
Common Mistakes:
Thinking >> concatenates numbers as strings
Expecting output as '10 20' instead of sum
Forgetting to close the file
4. Identify the error in the following code snippet:
std::ifstream file;
file.open("data.txt");
int x;
file >> x;
file.close();
medium
A. File is not opened before reading
B. File should not be closed manually
C. Incorrect syntax for reading integer
D. Missing check if file opened successfully
Solution
Step 1: Check file opening and reading steps
The code opens the file and reads an integer correctly. Syntax is valid.
Step 2: Identify missing safety check
There is no check to confirm if the file opened successfully before reading. This can cause runtime errors if the file doesn't exist.
Final Answer:
Missing check if file opened successfully -> Option D
Quick Check:
Always check file.open() success before reading [OK]
Hint: Always verify file opened before reading [OK]
Common Mistakes:
Ignoring file open failure
Assuming file always exists
Not closing the file (though here it is closed)
5. You want to read all integers from a file values.txt until the end of the file. Which code snippet correctly does this using ifstream?
hard
A. std::ifstream file("values.txt");
int num;
while (file >> num) {
std::cout << num << std::endl;
}
file.close();
B. std::ifstream file("values.txt");
int num;
while (!file.eof()) {
file >> num;
std::cout << num << std::endl;
}
file.close();
C. std::ifstream file("values.txt");
int num;
do {
file >> num;
std::cout << num << std::endl;
} while (!file.fail());
file.close();
D. std::ifstream file("values.txt");
int num;
while (file.good()) {
file >> num;
std::cout << num << std::endl;
}
file.close();
Solution
Step 1: Understand correct loop condition for reading
Using while (file >> num) reads integers and stops when reading fails (end of file or error).
Step 2: Analyze why other options are incorrect
std::ifstream file("values.txt");
int num;
while (!file.eof()) {
file >> num;
std::cout << num << std::endl;
}
file.close(); uses while (!file.eof()) which can cause reading invalid data after EOF. std::ifstream file("values.txt");
int num;
do {
file >> num;
std::cout << num << std::endl;
} while (!file.fail());
file.close(); uses do-while with fail check but prints invalid data after failure. std::ifstream file("values.txt");
int num;
while (file.good()) {
file >> num;
std::cout << num << std::endl;
}
file.close(); uses file.good() which may not detect EOF correctly before reading.
Final Answer:
std::ifstream file("values.txt");
int num;
while (file >> num) {
std::cout << num << std::endl;
}
file.close(); -> Option A
Quick Check:
Use while(file >> var) to read until EOF [OK]
Hint: Use while(file >> var) to read safely till EOF [OK]
Common Mistakes:
Using while(!file.eof()) causing extra reads
Printing data after failed read
Using file.good() incorrectly for loop condition
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.