Files
Write Output
A program can format a result into a file and then read that result back for verification.
formatted output
`fprintf` writes formatted text to the file stream.
read back
Reading the output back confirms the formatted result.
Write Output
write_output.c
Replay: real traced execution (multi-file project)
#include <stdio.h>
int main(void) {
int width = 4;
int height = 5;
int area = width * height;
FILE *file = fopen("write_output_demo.txt", "w+");
if (file == 0) {
return 1;
}
fprintf(file, "area=%d\n", area);
rewind(file);
char label[8];
int read = 0;
fscanf(file, "%7[^=]=%d", label, &read);
fclose(file);
remove("write_output_demo.txt");
printf("area=%d\n", read);
return 0;
}
#include <stdio.h>
int main(void) {
int width = 6;
int height = 5;
int area = width * height;
FILE *file = fopen("write_output_demo.txt", "w+");
if (file == 0) {
return 1;
}
fprintf(file, "area=%d\n", area);
rewind(file);
char label[8];
int read = 0;
fscanf(file, "%7[^=]=%d", label, &read);
fclose(file);
remove("write_output_demo.txt");
printf("area=%d\n", read);
return 0;
}
#include <stdio.h>
int main(void) {
int width = 8;
int height = 5;
int area = width * height;
FILE *file = fopen("write_output_demo.txt", "w+");
if (file == 0) {
return 1;
}
fprintf(file, "area=%d\n", area);
rewind(file);
char label[8];
int read = 0;
fscanf(file, "%7[^=]=%d", label, &read);
fclose(file);
remove("write_output_demo.txt");
printf("area=%d\n", read);
return 0;
}
width ← 4, height ← 5, area ← 20, file ← ⟨addr A⟩, label ← (empty)
3int main(void) {4 int width→ 4 = 4; //@width=6, 85 int height→ 5 = 5;6 int area→ 20 = width4 * height5;7 FILE *file→ ⟨addr A⟩ = fopen("write_output_demo.txt", "w+");89 if (file == 0) {10 return 1;11 }1213 fprintf(file⟨addr A⟩, "area=%d\n", area20);14 rewind(file⟨addr A⟩);1516 char label→ (empty)[8];17 int read→ 0 = 0;18 fscanf(file⟨addr A⟩, "%7[^=]=%d", label→ area, &read→ 20);1920 fclose(file⟨addr A⟩);21 remove("write_output_demo.txt");2223 printf("area=%d\n", read20);24 return 0;25}outputarea=20
width ← 6, height ← 5, area ← 30, file ← ⟨addr A⟩, label ← (empty)
3int main(void) {4 int width→ 6 = 6;5 int height→ 5 = 5;6 int area→ 30 = width6 * height5;7 FILE *file→ ⟨addr A⟩ = fopen("write_output_demo.txt", "w+");89 if (file == 0) {10 return 1;11 }1213 fprintf(file⟨addr A⟩, "area=%d\n", area30);14 rewind(file⟨addr A⟩);1516 char label→ (empty)[8];17 int read→ 0 = 0;18 fscanf(file⟨addr A⟩, "%7[^=]=%d", label→ area, &read→ 30);1920 fclose(file⟨addr A⟩);21 remove("write_output_demo.txt");2223 printf("area=%d\n", read30);24 return 0;25}outputarea=30
width ← 8, height ← 5, area ← 40, file ← ⟨addr A⟩, label ← (empty)
3int main(void) {4 int width→ 8 = 8;5 int height→ 5 = 5;6 int area→ 40 = width8 * height5;7 FILE *file→ ⟨addr A⟩ = fopen("write_output_demo.txt", "w+");89 if (file == 0) {10 return 1;11 }1213 fprintf(file⟨addr A⟩, "area=%d\n", area40);14 rewind(file⟨addr A⟩);1516 char label→ (empty)[8];17 int read→ 0 = 0;18 fscanf(file⟨addr A⟩, "%7[^=]=%d", label→ area, &read→ 40);1920 fclose(file⟨addr A⟩);21 remove("write_output_demo.txt");2223 printf("area=%d\n", read40);24 return 0;25}outputarea=40