页码 程 序
221 文件复制
232 学生信息的输入的2个程序
233 读取每个文件里的数值求出平均值并输出
243 函数Sum的完整定义(变动参数的函数)

返回 总目录

例:文件复制

#include <stdio.h>
void filecopy(FILE *ifp, FILE *ofp);

int main(int argc, char *argv[]) {
    FILE *ifp;
    char *name = argv[0];

    if (argc == 1) { /* 没有参数,从标准输入复制到标准输出 */
        filecopy(stdin, stdout);
        return 0;
    }

    while (*++argv != NULL)
        if ((ifp = fopen(*argv, "r")) == NULL)
            printf("%s, can't open input file: %s\n", name, *argv);
        else {
            filecopy(ifp, stdout);
            fclose(ifp);
        }

    return 0;
}

void filecopy(FILE *ifp, FILE *ofp) {
    int c;
    while ((c = getc(ifp)) != EOF)
        putc(c, ofp);
}

例:学生信息的输入的2个程序段

程序1

while (scanf("%ld %s %d %d %d", &number, name, &year, &month, &day) != 5) {
    printf("Input error.\n");
    printf("Format: number name year month day\n");
    while (gerchar() != '\n')
    ; /* 丢掉本输入行剩下的无用字符 */
}
 
程序2:
char line[256];
while (1) {
    printf(">>");
    gets(line);
    if (sscanf(line, "%ld %s %d %d %d",
                &number, name, &year, &month, &day) == 5)
        break;
    if (sscanf(line, "%ld %s %d,%d,%d",
                &number, name, &year, &month, &day) == 5)
        break;
    if (sscanf(line, "%ld %s %d/%d/%d",
                &number, name, &day, &month, &year) == 5)
        break;
    printf("Invalid form: %s", line);
}

例:读取每个文件里的数值求出平均值并输出

void pAverage(FILE *fp, char *fname) {
    double x, sum = 0.0;
    int n = 0, m, c;

    printf("\nFile %s:\n", fname);

    whlie ((m = fscanf(fp, "%lf", &x)) != EOF) {
        if (m == 1) {
            sum += x;
            n++;
            continue; /* 继续循环读入 */
        }
        printf("Date error. Discard: ");
        while (!isspace(c = getc(fp)))
            putchar(c);
        putchar('\n');
    }

    printf("Average: %16.8f\n", sum / n);
}

int main(void) {
    char name[256];
    FILE *fp;

    while (1) {
        printf("File name (Ctrl-Z for the end): ");
        if (gets(name) == NULL) break;
        if ((fp = fopen(name, "r")) == NULL)
            printf("Can't open file: %s\n", name);
        else {
            pAvarage(fp, name);
            fclose(fp);
            }
    }

    printf("Bye!\n");

    return 0;
}

例:函数Sum的完整定义(变动参数的函数)

int sum(int n, ...) {
    va_list vap;
    int i, s = 0;
    va_start(vap, n);
    for (i = 1; i <= n; i++)
        s += va_arg(vap, int);
    va_end(vap);
    return s;
}