E x c e r c i s e 7 − 1 Excercise\quad 7-1 Excercise7−1:
#include <stdio.h>
#include <string.h>
#include <ctype.h>
enum type {
LOWER, UPPER };
int main(int argc, char *argv[])
{
int c, mode = -1;
if (stricmp(*argv, "lower.exe") == 0)
{
printf("To lower\n");
mode = LOWER;
}
else if (stricmp(*argv, "upper.exe") == 0)
{
printf("To upper\n");
mode = UPPER;
}
if (mode == LOWER)
{
while ((c = getchar()) != EOF)
putchar(tolower(c));
}
else if (mode == UPPER)
{
while ((c = getchar()) != EOF)
putchar(toupper(c));
}
return 0;
}
E x c e r c i s e 7 − 2 Excercise\quad 7-2 Excercise7−2:
#include <stdio.h>
#include <ctype.h>
/* "%x" for hex, "%o" for octal */
#define FORMAT "%x"
#define LINELEN 75
int main()
{
int c, i = 0;
while ((c = getchar()) != EOF)
{
/* reset line length counter */
if (c == '\n')
i = 0;
/* check if equal to line length. If so, print new line and reset counter */
else if (++i == LINELEN)
{
i = 0;
putchar('\n');
}
/* graphic characters and spaces */
if (isgraph(c) || isspace(c))
{
putchar(c);
}
else
{
/* non-graphic characters */
printf(FORMAT, c);
}
}
return 0;
}
E x c e r c i s e 7 − 3 Excercise\quad 7-3 Excercise7−3:
#include <stdio.h>
#include <stdarg.h>
void minprintf(char *fmt, ...);
int main()
{
char *sval = "10";
int ival = 11;
double dval = 12.13;
unsigned int uival = 14;
char cval = 'F';
void *pval = sval;
minprintf("%%s=%s, %%d=%d, %%i=%i, %%f=%f, %%e=%e, %%E=%E, %%g=%g, %%G=%G, %%o=%o, %%x=%x\n", sval, ival, ival, dval, dval, dval, dval, dval, uival, uival);
printf("%%s=%s, %%d=%d, %%i=%i, %%f=%f, %%e=%e, %%E=%E, %%g=%g, %%G=%G, %%o=%o, %%x=%x\n", sval, ival, ival, dval, dval, dval, dval, dval, uival, uival);
minprintf("%%X=%X, %%u=%u, %%c=%c, %%p=%p, %%%%=%%\n", uival, uival, cval, pval);
printf("%%X=%X, %%u=%u, %%c=%c, %%p=%p, %%%%=%%\n", uival, uival, cval, pval);
}
/* minimal printf with variable argument list */
void minprintf(char *fmt, ...)
{
/* points to each unnamed arg in turn */
va_list ap;
char *p, *sval, format[3] = {
'%', '\0', '\0' };
int ival;
double dval;
unsigned int uival;
void *pval;
/* make ap point to 1st unnamed arg */
va_start(ap, fmt);
for (p = fmt; *p; p++)
{
if (*p != '%')
{
putchar(*p);
continue;
}
switch (*++p)
{
case 'd': case 'i': case 'c': /* char is promoted to int when passed through '...' */
ival = va_arg(ap, int);
format[1] = *p;
printf(format, ival);
break;
case 'f': case 'e': case 'E': case 'g': case 'G':
dval = va_arg(ap, double);
format[1] = *p;
printf(format, dval);
break;
case 's':
for (sval = va_arg(ap, char *); *sval; sval++)
putchar(*sval);
break;
case 'x': case 'X': case 'o': case 'u':
uival = va_arg(ap,<