C Static
#include <stdio.h> /* * This example demonstrates a simple use of static data. It also makes some * more advanced use of printf. The program prints a very simple ledger. The * function print_line keeps a running balance, printing one line each time it * is called. It uses static data to keep track of the total, and to condition * the first call to print headers. The use of static is important, since * the value of the first flag and of the balance must persist between calls * to print_line. */ /* * Print table line. It receives a description and an amount. */ void print_line(char *descr, double amt) { static int first = 1; /* Identifies first call. */ static double balance = 0.0; /* Running balance. */ /* First time through, print header line. */ if(first) { printf("%-20s%10s%10s\n", "Description", "Amount", "Balance"); printf("%-20s%10s%10.2f\n", "Initial Balance", "", 0.0); first = 0; } /* Now, process the transaction, and print. */ balance += amt; printf("%-20s%10.2f%10.2f\n", descr, amt, balance); } /* Just a convenient place to keep pairs of test data arguments for print_line. */ struct legdat { char *descr; double amt; }; /* * Just a boring test driver */ main() { /* Lists of data to send to the ledger. */ struct legdat legdat[] = { "Paycheck", 1579.17, "Gas", -14.56, "Rent", -550.16, "Refund", 33.45, "Pizza Party", -155.18, "New Carpet", -250.00, NULL }; struct legdat *scan; /* Go through the data and print the lines. */ for(scan = legdat; scan->descr != NULL; ++scan) print_line(scan->descr, scan->amt); }