页码 | 程 序 |
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);
}
程序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;
}
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;
}