🔵 What are Connector Circles?
When a flowchart grows large or the arrows would have to cross each other (making it unreadable), we use connector circles. A connector is a small circle containing a letter or number (A, B, 1, 2…). It works as a labelled bridge:
Outgoing connector: instead of drawing a long arrow all the way to the destination, you draw an arrow into a circle labelled A. This means "flow continues at the matching A circle".
Incoming connector: elsewhere in the diagram (even on another page), an identical circle A with an arrow leaving it shows where the flow resumes. Every label must appear exactly twice — once as the source, once as the destination.
Connectors are used most in nested loops — where the inner loop's exit must reconnect to the outer loop's update step without drawing a long crossing line.
for loop has four zones: Init (runs once), Condition (diamond — if NO, exit), Body (runs each pass), and Update (i++). After Update, the arrow loops back up to the Condition. When Condition is NO, the arrow exits the loop downward.
#include <stdio.h> int main() { /* Init ─ Condition ─ Body ─ Update */ for (int i = 0; i < 5; i++) { printf("i = %d\n", i); } printf("After loop\n"); return 0; }
i = 0 i = 1 i = 2 i = 3 i = 4 After loop
goto causes an unconditional jump to a labelled statement anywhere in the same function. In the flowchart, a goto is represented as an arrow that crosses over normal flow and lands at a labelled box. The most legitimate use in C is breaking out of multiple nested loops — where a single break only exits the innermost loop. The full flowchart below shows: outer loop (rows), inner loop (cols), value check diamond, goto error_exit arrow crossing both loops, then the two separate END paths — one for "all OK" and one for "error found".
#include <stdio.h> int main() { int grid[3][3] = { { 1, 2, 3}, { 4, -1, 6}, /* -1 at [1][1] */ { 7, 8, 9} }; /* Outer loop: rows */ for (int i = 0; i < 3; i++) { /* Inner loop: columns */ for (int j = 0; j < 3; j++) { printf("Check [%d][%d]=%d\n", i, j, grid[i][j]); if (grid[i][j] < 0) goto error_exit; /* jump BOTH */ } } /* Reached only if NO negative found */ printf("All values OK.\n"); return 0; error_exit: /* label — goto lands here */ printf("Error: negative value!\n"); return 1; }
Check [0][0]=1 Check [0][1]=2 Check [0][2]=3 Check [1][0]=4 Check [1][1]=-1 Error: negative value!
Check [0][0]=1 Check [0][1]=2 ... Check [2][2]=9 All values OK.
if, while, for, return, or break.- Flowchart symbols: Oval = Start/End. Rectangle = Process. Diamond = Decision (Yes/No). Parallelogram = Input/Output. Circle = Connector. Arrow = flow direction. Each diamond has exactly two exits.
- Connector circles: Used to link two parts of a flowchart without crossing arrows. A labelled circle appears twice — once as the output (arrow into it) and once as the input (arrow leaving it). Every label must appear exactly twice.
- FC2 — for loop: Init (once) → Condition diamond → YES: Body → Update → back to Condition. NO: exits loop. Update arrow loops back UP to Condition.
- FC3 — while: Condition diamond comes BEFORE body. If condition false on first check, body never runs. Loop-back arrow from body bottom to condition diamond.
- FC4 — do-while: Body comes BEFORE condition diamond. Body always runs at least once. YES from condition loops back UP to body. NO exits.
- FC5 — break: Inner decision diamond inside loop body. YES (break) arrow exits loop entirely — joins the NO-exit path to "after loop". NO continues to update and loops again.
- FC6 — continue: Inner decision. YES (continue) arrow bypasses rest of body and lands directly on the i++ update box. Loop does NOT exit — next iteration begins.
- FC7 — goto: A long coloured arrow crosses all loop boundaries and lands at the labelled box (error_exit:). Two separate END nodes — one for the normal path (return 0) and one for the error path (return 1). Only accepted use: exit nested loops or centralised cleanup.