Files
Read Lines
fgets reads one line at a time into a character buffer.
line buffer
The buffer limits how many characters one `fgets` call can store.
count lines
The loop increments a counter for each successfully read line.
Read Lines
read_lines.c
Replay: real traced execution (multi-file project)
#include <stdio.h>
int main(void) {
int extraLine = 0;
FILE *file = fopen("read_lines_demo.txt", "w+");
if (file == 0) {
return 1;
}
fputs("alpha\n", file);
fputs("beta\n", file);
if (extraLine) {
fputs("gamma\n", file);
}
rewind(file);
char line[16];
int lines = 0;
while (fgets(line, sizeof line, file) != 0) {
lines++;
}
fclose(file);
remove("read_lines_demo.txt");
printf("lines=%d\n", lines);
return 0;
}
#include <stdio.h>
int main(void) {
int extraLine = 1;
FILE *file = fopen("read_lines_demo.txt", "w+");
if (file == 0) {
return 1;
}
fputs("alpha\n", file);
fputs("beta\n", file);
if (extraLine) {
fputs("gamma\n", file);
}
rewind(file);
char line[16];
int lines = 0;
while (fgets(line, sizeof line, file) != 0) {
lines++;
}
fclose(file);
remove("read_lines_demo.txt");
printf("lines=%d\n", lines);
return 0;
}
extraLine ← 0, file ← ⟨addr A⟩, line ← (empty), lines ← 0
3int main(void) {4 int extraLine→ 0 = 0; //@extraLine=15 FILE *file→ ⟨addr A⟩ = fopen("read_lines_demo.txt", "w+");67 if (file == 0) {8 return 1;9 }1011 fputs("alpha\n", file⟨addr A⟩);12 fputs("beta\n", file⟨addr A⟩);13 if (extraLine) {14 fputs("gamma\n", file);15 }1617 rewind(file⟨addr A⟩);1819 char line→ (empty)[16];20 int lines→ 0 = 0;21 while (fgets(line, sizeof line, file) != 0) {lines ← 1
pass 1 of 220int lines = 0;21while (fgets(linealpha , sizeof line, file⟨addr A⟩) != 0) {22 lines→ 1++;23}lines ← 2
pass 2 of 220int lines = 0;21while (fgets(linebeta , sizeof line, file⟨addr A⟩) != 0) {22 lines→ 2++;23}fclose(file);
25 fclose(file⟨addr A⟩);26 remove("read_lines_demo.txt");2728 printf("lines=%d\n", lines2);29 return 0;30}outputlines=2
extraLine ← 1, file ← ⟨addr A⟩
3int main(void) {4 int extraLine→ 1 = 1;5 FILE *file→ ⟨addr A⟩ = fopen("read_lines_demo.txt", "w+");67 if (file == 0) {8 return 1;9 }1011 fputs("alpha\n", file⟨addr A⟩);12 fputs("beta\n", file⟨addr A⟩);13 if (extraLine) {if (extraLine)
12fputs("beta\n", file);13if (extraLine1) {14 fputs("gamma\n", file⟨addr A⟩);15}line ← (empty), lines ← 0
17rewind(file⟨addr A⟩);1819char line→ (empty)[16];20int lines→ 0 = 0;21while (fgets(line, sizeof line, file) != 0) {lines ← 1
pass 1 of 320int lines = 0;21while (fgets(linealpha , sizeof line, file⟨addr A⟩) != 0) {22 lines→ 1++;23}All 3 passes — pass 1 is the card above pass linelines1 alpha 0 → 1 2 beta 1 → 2 3 gamma 2 → 3 fclose(file);
25 fclose(file⟨addr A⟩);26 remove("read_lines_demo.txt");2728 printf("lines=%d\n", lines3);29 return 0;30}outputlines=3