Skip to content

Commit 1b69697

Browse files
committed
chapter 7 sample code
1 parent 6cb78c6 commit 1b69697

File tree

4 files changed

+125
-0
lines changed

4 files changed

+125
-0
lines changed
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
#include <stdio.h>
2+
3+
main(int argc, char *argv[])
4+
{
5+
FILE *fp;
6+
void filecopy(FILE *, FILE *);
7+
8+
if (argc == 1)
9+
filecopy(stdin, stdout);
10+
else
11+
while (--argc > 0)
12+
if ((fp = fopen(*++argv, "r")) == NULL) {
13+
printf("cat: can't open %s\n", *argv);
14+
return 1;
15+
} else {
16+
filecopy(fp, stdout);
17+
fclose(fp);
18+
}
19+
20+
return 0;
21+
}
22+
23+
void filecopy(FILE *ifp, FILE *ofp)
24+
{
25+
int c;
26+
27+
while ((c = getc(ifp)) != EOF)
28+
putc(c, ofp);
29+
}
30+
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
#include <stdio.h>
2+
#include <stdlib.h>
3+
4+
main(int argc, char *argv[])
5+
{
6+
FILE *fp;
7+
void filecopy(FILE *, FILE *);
8+
char *prog = argv[0];
9+
10+
if (argc == 1)
11+
filecopy(stdin, stdout);
12+
else
13+
while (--argc > 0)
14+
if ((fp = fopen(*++argv, "r")) == NULL) {
15+
fprintf(stderr, "%s: can't open %s\n", prog, *argv);
16+
exit(1);
17+
} else {
18+
filecopy(fp, stdout);
19+
fclose(fp);
20+
}
21+
22+
if (ferror(stdout)) {
23+
fprintf(stderr, "%s: error writing stdout\n", prog);
24+
exit(2);
25+
}
26+
27+
exit(0);
28+
}
29+
30+
void filecopy(FILE *ifp, FILE *ofp)
31+
{
32+
int c;
33+
34+
while ((c = getc(ifp)) != EOF)
35+
putc(c, ofp);
36+
}
37+
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
#include <stdarg.h>
2+
#include <stdio.h>
3+
4+
void minprintf(char *fmt, ...);
5+
6+
int main()
7+
{
8+
minprintf("int: %d, double: %f, string: %s\n", 1, 0.123, "Hello");
9+
10+
return 0;
11+
}
12+
13+
void minprintf(char *fmt, ...)
14+
{
15+
va_list ap;
16+
char *p, *sval;
17+
int ival;
18+
double dval;
19+
20+
va_start(ap, fmt);
21+
for (p = fmt; *p; p++) {
22+
if (*p != '%') {
23+
putchar(*p);
24+
continue;
25+
}
26+
switch(*++p) {
27+
case 'd':
28+
ival = va_arg(ap, int);
29+
printf("%d", ival);
30+
break;
31+
case 'f':
32+
dval = va_arg(ap, double);
33+
printf("%f", dval);
34+
break;
35+
case 's':
36+
for (sval = va_arg(ap, char *); *sval; sval++)
37+
putchar(*sval);
38+
break;
39+
default:
40+
putchar(*p);
41+
break;
42+
}
43+
}
44+
va_end(ap);
45+
}
46+
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
#include <stdio.h>
2+
3+
main()
4+
{
5+
double sum, v;
6+
7+
sum = 0;
8+
while (scanf("%1f", &v) == 1)
9+
printf("\t%.2f\n", sum += v);
10+
return 0;
11+
}
12+

0 commit comments

Comments
 (0)