跳转至

惯用法


判定变量是否落在某个数值范围内(p48)

if (0 <= i && i < n) { /* ... */ }

/* 相反的情况(i在范围之外) */
if (i < 0 || i >= n) { /* ... */ }

用 while 语句建立无限循环(p63)

while (1) { /* ... */ }

for 语句的惯用法(p66)

/* 从0向上加到n-1 */
for (i = 0; i < n; ++i) { /* ... */ }

/* 从1向上加到n */
for (i = 1; i <= n; ++i) { /* ... */ }

/* 从n-1向下减到0 */
for (i = n-1; i >= 0; --i) { /* ... */ }

/* 从n向下减到1 */
for (i = n; i > 0; --i) { /* ... */ }

用 for 语句建立无限循环(p67)

for (;;) { /* ... */ }

读入并忽略掉所有当前输入行中的其余字符(p87)

while (getchar() != '\n'); /* skips rest of line */

跳过无限数量的空格字符(p87)

while ((ch = getchar()) == ' '); /* skips blanks */

数组和 for 循环(p99)

int a[N];
for (i = 0; i < N; i++)
        a[i] = 0;           /* clear a */

for (i = 0; i < N; i++)
    scanf("%d", &a[i]);     /* reads data into a */

for (i = 0; i < N; i++)
    sum += a[i];            /* sums the elements of a */

数组名作为指针(p160)

for (p = a; p < a + N; p++)
    sum += *p;

定义字符串变量

#define STR_LEN 80
char str[STR_LEN + 1];

令s指向字符串尾部

while (*s) s++; /* s最终指向了空字符 */
while (*s++);   /* s最终指向了空字符后一个字符 */

字符串拷贝

while ((*p++ = *s2++) != '\0');

设置位

i |= 1 << j;        /* set bit j */

将位清0

i &= ~(1 << j);     /* clear bit j */

测试位

if (i & 1 << j) ... /* test bit j */

scanf

while (scanf("%d", &i) == 1) {
    /* ... */
}

getc

while ((ch = getc(fp)) != eof) {
    /* ... */
}