Practical C Programs
Report Pipeline
A final report can count records, apply a limit, and choose a compact status label.
threshold
The limit decides which records need attention.
status label
A small summary label makes the final result easy to scan.
Report Pipeline
report_pipeline.c
Replay: real traced execution (multi-file project)
#include <stdio.h>
int main(void) {
int warningLimit = 1;
int warnings[3] = {0, 1, 2};
int flagged = 0;
for (int i = 0; i < 3; i++) {
if (warnings[i] > warningLimit) {
flagged++;
}
}
const char *status = "pass";
if (flagged > 0) {
status = "review";
}
printf("limit=%d flagged=%d status=%s\n", warningLimit, flagged, status);
return 0;
}
#include <stdio.h>
int main(void) {
int warningLimit = 0;
int warnings[3] = {0, 1, 2};
int flagged = 0;
for (int i = 0; i < 3; i++) {
if (warnings[i] > warningLimit) {
flagged++;
}
}
const char *status = "pass";
if (flagged > 0) {
status = "review";
}
printf("limit=%d flagged=%d status=%s\n", warningLimit, flagged, status);
return 0;
}
#include <stdio.h>
int main(void) {
int warningLimit = 2;
int warnings[3] = {0, 1, 2};
int flagged = 0;
for (int i = 0; i < 3; i++) {
if (warnings[i] > warningLimit) {
flagged++;
}
}
const char *status = "pass";
if (flagged > 0) {
status = "review";
}
printf("limit=%d flagged=%d status=%s\n", warningLimit, flagged, status);
return 0;
}
warningLimit ← 1, warnings ← ⟨addr A⟩, flagged ← 0
3int main(void) {4 int warningLimit→ 1 = 1; //@warningLimit=0, 25 int warnings→ ⟨addr A⟩[3] = {0, 1, 2};6 int flagged→ 0 = 0;for (int i = 0; i < 3; i++)
pass 1 of 38for (int i0 = 0; i < 3; i++) {9 if (warnings[i] > warningLimit) {All 3 passes — pass 1 is the card above pass iwarnings[i]warningLimitflagged1 0 — — — 2 1 — — — 3 2 2 1 0 → 1 flagged ← 1
8for (int i = 0; i < 3; i++) {9 if (warnings[i]2 > warningLimit1) {10 flagged→ 1++;11 }status ← pass
14const char *status→ pass = "pass";15if (flagged > 0) {status ← review
14const char *status = "pass";15if (flagged1 > 0) {16 status→ review = "review";17}printf("limit=%d flagged=%d status=%s ", warningLimit, flagged, status…
19 printf("limit=%d flagged=%d status=%s\n", warningLimit1, flagged1, statusreview);20 return 0;21}outputlimit=1 flagged=1 status=review
warningLimit ← 0, warnings ← ⟨addr A⟩, flagged ← 0
3int main(void) {4 int warningLimit→ 0 = 0;5 int warnings→ ⟨addr A⟩[3] = {0, 1, 2};6 int flagged→ 0 = 0;for (int i = 0; i < 3; i++)
pass 1 of 38for (int i0 = 0; i < 3; i++) {9 if (warnings[i] > warningLimit) {All 3 passes — pass 1 is the card above pass iwarnings[i]warningLimitflagged1 0 — — — 2 1 1 0 0 → 1 3 2 2 0 1 → 2 flagged ← 1
pass 1 of 28for (int i = 0; i < 3; i++) {9 if (warnings[i]1 > warningLimit0) {10 flagged→ 1++;11 }flagged ← 2
pass 2 of 28for (int i = 0; i < 3; i++) {9 if (warnings[i]2 > warningLimit0) {10 flagged→ 2++;11 }status ← pass
14const char *status→ pass = "pass";15if (flagged > 0) {status ← review
14const char *status = "pass";15if (flagged2 > 0) {16 status→ review = "review";17}printf("limit=%d flagged=%d status=%s ", warningLimit, flagged, status…
19 printf("limit=%d flagged=%d status=%s\n", warningLimit0, flagged2, statusreview);20 return 0;21}outputlimit=0 flagged=2 status=review
warningLimit ← 2, warnings ← ⟨addr A⟩, flagged ← 0
3int main(void) {4 int warningLimit→ 2 = 2;5 int warnings→ ⟨addr A⟩[3] = {0, 1, 2};6 int flagged→ 0 = 0;for (int i = 0; i < 3; i++)
pass 1 of 38for (int i0 = 0; i < 3; i++) {9 if (warnings[i] > warningLimit) {All 3 passes — pass 1 is the card above pass i1 0 2 1 3 2 status ← pass
14 const char *status→ pass = "pass";15 if (flagged > 0) {16 status = "review";17 }1819 printf("limit=%d flagged=%d status=%s\n", warningLimit2, flagged0, statuspass);20 return 0;21}outputlimit=2 flagged=0 status=pass