# Chapter 3

Control Flow

Not much to say here. It’s pretty much the same as JavaScript.

Notably, the authors delve right into a binary search implementation as a demonstration of control flow in C.

## Binary Search

We want to determine if value `x` occurs in array `v`. It assumes the elements in `v` are already sorted and ascending. The function returns the position (a number between 0 and n-1) if `x` occurs in `v`, and -1 if not.

``````/* binsearch: find x in v <= v <= ... <= v[n-1] */
int binsearch(int x, int v[], int n)
{
int low, high, mid;

low = 0;
high = n - 1;
while (low <= high) {
mid = (low+high)/2;
if (x < v[mid]) {
high = mid + 1;
}  else if (x > v[mid]) {
low = mid + 1;
} else {
/* found match */
return mid;
}
}
/* no match */
return -1;
}``````

## Goto

The C programming language has a feature called `goto`, which is like a javascript label. The authors don’t seem to like or recommend this language feature much, saying that, “any code involving a `goto` can be written without it”. The contest that this feature is harder to read/maintain as it breaks the vertical flow of the code?

Anyways, it can be useful, in a case like this with nested for-loops.

``````for (i = 0; i < n; i++) {
for (j = 0; j < m; j++) {
if (a[i] == b[j]) goto found;
}
}
found:
/* got one: a[i] == b[j] */

for ( ... ) {
for ( ... ) {
if (disaster) goto error;
}
}

error:
/* clean up the mess */``````