Bird
Raised Fist0
Cprogramming~5 mins

Reading from files in C - Time & Space Complexity

Choose your learning style10 modes available
Time Complexity: Reading from files
O(n)
Understanding Time Complexity

When reading from files, we want to know how the time needed grows as the file size grows.

We ask: How does reading more data affect how long the program runs?

Scenario Under Consideration

Analyze the time complexity of the following code snippet.


FILE *file = fopen("data.txt", "r");
char buffer[256];

while (fgets(buffer, sizeof(buffer), file)) {
    // process the line
}
fclose(file);
    

This code reads a file line by line until the end, processing each line.

Identify Repeating Operations

Identify the loops, recursion, array traversals that repeat.

  • Primary operation: Reading each line from the file using fgets inside a while loop.
  • How many times: Once for every line in the file, repeating until the file ends.
How Execution Grows With Input

As the file gets bigger, the number of lines grows, so the loop runs more times.

Input Size (n)Approx. Operations
10 linesAbout 10 reads
100 linesAbout 100 reads
1000 linesAbout 1000 reads

Pattern observation: The time grows directly with the number of lines; double the lines, double the reads.

Final Time Complexity

Time Complexity: O(n)

This means the time to read the file grows in a straight line with the number of lines in the file.

Common Mistake

[X] Wrong: "Reading a file always takes the same time no matter the size."

[OK] Correct: The program reads each line one by one, so more lines mean more work and more time.

Interview Connect

Understanding how file reading time grows helps you write efficient programs and explain your code clearly in interviews.

Self-Check

"What if we read the file character by character instead of line by line? How would the time complexity change?"

Practice

(1/5)
1. What does the fopen() function with mode "r" do in C?
easy
A. It deletes a file.
B. It opens a file for reading only.
C. It creates a new file.
D. It opens a file for writing only.

Solution

  1. Step 1: Understand fopen modes

    The mode "r" in fopen means open the file for reading only.
  2. Step 2: Check other modes

    Modes like "w" are for writing, "a" for appending, and none delete files.
  3. Final Answer:

    It opens a file for reading only. -> Option B
  4. Quick Check:

    fopen with "r" = open for reading [OK]
Hint: Remember: "r" means read only mode in fopen [OK]
Common Mistakes:
  • Confusing "r" with write mode "w"
  • Thinking fopen deletes or creates files with "r"
  • Not checking if file exists before reading
2. Which of the following is the correct way to open a file named data.txt for reading in C?
easy
A. FILE *fp = fopen("data.txt", "r");
B. FILE *fp = fopen("data.txt", "w");
C. FILE *fp = fopen("data.txt", "a");
D. FILE *fp = fopen("data.txt");

Solution

  1. Step 1: Check fopen syntax

    fopen requires two arguments: filename and mode as strings.
  2. Step 2: Identify correct mode for reading

    "r" is the mode to open a file for reading.
  3. Final Answer:

    FILE *fp = fopen("data.txt", "r"); -> Option A
  4. Quick Check:

    Correct fopen syntax with "r" mode = FILE *fp = fopen("data.txt", "r"); [OK]
Hint: Always use two arguments in fopen: filename and mode [OK]
Common Mistakes:
  • Using "w" mode which opens for writing, not reading
  • Omitting the mode argument in fopen
  • Using "a" mode which opens for appending
3. What will be the output of the following C code if the file input.txt contains the line "Hello"?
FILE *fp = fopen("input.txt", "r");
char buffer[10];
fgets(buffer, 10, fp);
printf("%s", buffer);
fclose(fp);
medium
A. Hello\n
B. Hello
C. Hello\0
D. Error: file not found

Solution

  1. Step 1: Understand fgets behavior

    fgets reads a line including the newline character if it fits in the buffer.
  2. Step 2: Check file content and output

    The file has "Hello" followed by a newline, so fgets reads "Hello\n" and prints it.
  3. Final Answer:

    Hello\n -> Option A
  4. Quick Check:

    fgets includes newline if present = Hello\n [OK]
Hint: fgets reads newline character if space allows [OK]
Common Mistakes:
  • Assuming fgets removes newline automatically
  • Confusing null terminator with newline
  • Not checking if file opened successfully
4. Identify the error in this code snippet that reads a character from a file:
FILE *fp = fopen("file.txt", "r");
char c;
c = fgetc(fp);
printf("%c", c);
fclose(fp);
medium
A. fclose should be called before reading.
B. fgetc should be replaced with fgets.
C. Variable c should be an int, not char.
D. Missing check if fopen returned NULL before reading.

Solution

  1. Step 1: Check file open validation

    Always check if fopen returns NULL before reading to avoid errors.
  2. Step 2: Review other parts

    fgetc is correct for reading one char; c as char is acceptable; fclose after reading is correct.
  3. Final Answer:

    Missing check if fopen returned NULL before reading. -> Option D
  4. Quick Check:

    Always check fopen result before file operations [OK]
Hint: Check fopen != NULL before reading file [OK]
Common Mistakes:
  • Skipping NULL check after fopen
  • Confusing fgetc and fgets usage
  • Closing file too early
5. You want to read all lines from a file log.txt and print them. Which code snippet correctly does this in C?
hard
A. FILE *fp = fopen("log.txt", "r"); char c; while((c = fgetc(fp)) != EOF) { printf("%c", c); } fclose(fp);
B. FILE *fp = fopen("log.txt", "w"); char line[100]; while(fgets(line, 100, fp) != NULL) { printf("%s", line); } fclose(fp);
C. FILE *fp = fopen("log.txt", "r"); char line[100]; while(fgets(line, 100, fp) != NULL) { printf("%s", line); } fclose(fp);
D. FILE *fp = fopen("log.txt", "r"); char line[100]; while(fgets(line, 100, fp)) { printf(line); } fclose(fp);

Solution

  1. Step 1: Check file open mode

    Opening with "r" is correct for reading; "w" would overwrite the file.
  2. Step 2: Validate reading loop and printing

    Using fgets with NULL check is correct; printf with "%s" is safe and prints lines properly.
  3. Step 3: Review other options

    FILE *fp = fopen("log.txt", "w"); char line[100]; while(fgets(line, 100, fp) != NULL) { printf("%s", line); } fclose(fp); uses wrong mode "w"; FILE *fp = fopen("log.txt", "r"); char c; while((c = fgetc(fp)) != EOF) { printf("%c", c); } fclose(fp); reads char by char, not lines; FILE *fp = fopen("log.txt", "r"); char line[100]; while(fgets(line, 100, fp)) { printf(line); } fclose(fp); uses printf(line) without format string, unsafe.
  4. Final Answer:

    Correct reading lines with fgets and printing with printf("%s", line). -> Option C
  5. Quick Check:

    Use fgets + printf("%s") + fopen with "r" [OK]
Hint: Use fgets in loop with NULL check and printf("%s") [OK]
Common Mistakes:
  • Opening file with wrong mode "w" for reading
  • Using printf without format string
  • Reading char by char when lines needed
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard