Exercise 7-1 (cases)
Chapter_7 | Exercise_7-2 |
Exercise 7-1 K&R, p. 153
Exercise 7-1. Write a program that converts upper case to lower or lower case to upper, depending on the name it is invoked with, as found in argv[0].
case.c K&R, p. 153 download
#include <stdio.h> // for getchar(), putchar(), printf(), EOF
#include <string.h> // for strcmp()
#include <ctype.h> // for tolower(), to upper()
// convert input to lower/upper case
int main(int argc, char *argv[])
{
if (argc > 1)
{
printf("Usage:\n");
printf("./lower\n");
printf("(exec -a ./lower ./case)\n");
printf("./upper\n");
printf("(exec -a ./upper ./case)\n");
return 1; // end program, signalling error
}
int c;
while((c = getchar()) != EOF)
{
if (strcmp(argv[0], "./lower") == 0)
{putchar(tolower(c));}
else if (strcmp(argv[0], "./upper") == 0)
{putchar(toupper(c));}
else {putchar(c);}
}
return 0;
}
/*
gcc case.c -o lower
./lower
HELLO
hello
// Ctrl^D in Linux, Ctrl^Z+Enter in Windows (EOF)
./lower < case.c
// all lowercase, like eof
gcc case.c -o upper
./upper
hello
HELLO
// Ctrl^D in Linux, Ctrl^Z+Enter in Windows (EOF)
./upper < case.c
// all uppercase
gcc case.c -o case
(exec -a ./lower ./case)
HELLO
hello
// Ctrl^D in Linux, Ctrl^Z+Enter in Windows (EOF)
(exec -a ./lower ./case) < case.c
// all lowercase, like eof
// () mark a subprocess - to prevent closing the terminal window
// when the command `exec' finishes
(exec -a ./upper ./case)
hello
HELLO
// Ctrl^D in Linux, Ctrl^Z+Enter in Windows (EOF)
(exec -a ./upper ./case) < case.c
// all uppercase
./case
HELLO
HELLO
hello
hello
// Ctrl^D in Linux, Ctrl^Z+Enter in Windows (EOF)
./case < case.c
// Unchanged
./case lower
Usage:
./lower
(exec -a ./lower ./case)
./upper
(exec -a ./upper ./case)
*/
Note: See GitHub-kr_(7.1) and clc-wiki-kr_(7.1) solutions. Parentheses for the commands above represent a (subshell).
Chapter_7 | BACK_TO_TOP | Exercise_7-2 |
Comments
Post a Comment