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

Popular posts from this blog

Contents

Blogger Page Margins in Contempo