Sponsored Content
Full Discussion: Text stream K&R exercises
Operating Systems OS X (Apple) Text stream K&R exercises Post 302387796 by Jammer Six on Monday 18th of January 2010 04:49:11 PM
Old 01-18-2010
I started thinking about what you said, and I realized that it doesn't matter.

The goal is to replace strings of blanks with single blanks, and then I realized I was over-thinking it, and making it too complicated.

So I stripped out the counter, did away with all the unnecessary activity, and came up with this, which I believe is a better solution.

Thank you, Franklin, Smilie

Code:
/*
 *  copy2.c
 *  
 *	Exercise 1-9. Write a program to copy it's input to it's output,
 *	replacing each string of one or more blanks by a single blank.
 */

#include <stdio.h>

main(){
	
	int	c;	// the current character
	
	printf("\n\n");
	
	while ((c = getchar()) != EOF) { // while not EOF
		if (c == ' ') {
			
/* You enter this if loop if you hit one or more blank spaces.
No matter how many blank spaces there are, run through all of
 them, doing nothing. */
			
			while ((c = getchar()) == ' ') {
				; // do nothing.
			} // end while loop
			
/* c is now holding the first character afer however many blanks there were.
 Replace all the blanks by printing one blank to output, 
 then leave the if loop and print the character. */
			
			printf(" "); 
		}  // end if loop
		
		putchar(c);
		
	} // end while loop
	
	printf("\n\n");
} // end main

And now I believe I'll look at 1-10.

---------- Post updated at 13:49 ---------- Previous update was at 06:42 ----------

1-10 was a piece of cake, other than chasing my tail all over the book trying to print two backslashes...

I also don't get the idea of printing two backspaces.

If you backspace, you erase what you just typed, and there's nothing there-- so there's not ever anything to print!

Would there ever be a legitimate reason to record backspaces, and print them in output?

Seems like they would just make things complicated...

Code:
/*
 *  replace.c
 *  
 *	Exercise 1-10. Write a program to copy its input to its output, replacing each tab
 *	by \t, each backspace by \b and each backslash by \\. This makes tabs and backslashes
 *	visible in an unambiguous way.
 */

#include	<stdio.h>

main(){
	int	c; // the character
	
	while ((c = getchar())!= EOF) {
		
		if (c == '\t') { // if it's a tab
			printf("\\t");
		} // end if
		
		else if (c == '\b') {	// backspace
			printf("\\b");
		}  // end else if
		
		else if (c == '\\') {	// backslash
			printf("\\\\");
		}  // end else if
		
		else 
			putchar(c);

	} // end while loop
} // end main

 

10 More Discussions You Might Find Interesting

1. UNIX for Dummies Questions & Answers

exercises in shell

Hi, I am a beginner at shell scripting, though I have several years of Oracle programming experience. Can anyone recommend a site where I can find some exercises on shell programming. Is there anywhere I can telnet as I dont have UNIX OS on my PC? Thanks Rohit (1 Reply)
Discussion started by: rohitv
1 Replies

2. Shell Programming and Scripting

Shall Scripts exercises

I have just 3 things that I really need to know the solution, please allow me to show it. any help would be nice script that backup a file. The file name to backup should be provided as input parameter, the backup file should have the same file name with the extension ".bak". If the user... (1 Reply)
Discussion started by: anything
1 Replies

3. Shell Programming and Scripting

regex to remove text before&&after comma chars

Hi, all: I have a question about "cleaning up" a huge file with regular expression(s) and sed: The init file goes like this: block1,blah-blah-blah-blah,numseries1,numseries2,numseries3,numseries4 block2,blah-blah-blah-blah-blah,numseries,numseries2,numseries3,numseries4 ...... (3 Replies)
Discussion started by: yomaya
3 Replies

4. Shell Programming and Scripting

Need ideas for practice exercises in sh

I did an assignment for sh scripting back in november, and I found it quite fun learning. I would like to retain this knowledge as I'm pretty sure it was my only scripting assignment, from now on in my programming course we won't be doing any scripting apart from the typical makefile scripts. The... (6 Replies)
Discussion started by: gcampton
6 Replies

5. Shell Programming and Scripting

[Video stream] network stream recording with mplayer

Hi I used this command: mplayer http://host/axis-cgi/mjpg/video.cgi -user root -passwd root \ -cache 1024 -fps 25.0 -nosound -vc ffh264 \ -demuxer 3 -dumpstream -dumpfile output.avi It's ok but... Video Playing is very fast! Why? Is it a synch problem? What parameter I have to use for... (1 Reply)
Discussion started by: takeo.kikuta
1 Replies

6. Shell Programming and Scripting

I would like to have some exercises to develop my skills

Hi , I would like to do some exercises/scripts in order to develop my skills in shell scripts, can someone pass me some links/suggestions where i can find this? Thanks a lot :) (3 Replies)
Discussion started by: prpkrk
3 Replies

7. Shell Programming and Scripting

Array & text file

Hi all, i have a text file such as: 10 17:54:47,213 10 17:54:47,214 10 17:54:49,338 10 17:54:49,399 10 17:54:50,402 10 17:54:50,403 11 17:54:47,213 11 17:54:47,213 11 17:54:49,362 11 17:54:49,422 11 17:54:50,429 11 17:54:50,429 11 17:54:50,429 11 17:54:50,429 11 17:54:51,510 12... (10 Replies)
Discussion started by: sbamap
10 Replies

8. Shell Programming and Scripting

Extract & Manipulate continous data stream-- tcpdump

Hello; I have this rather tricky problem to solve --(to me, anyways) .. I am processing the following one liner with tcpdump.. tcpdump -i T3501 -A ether host 00:1e:49:29:fc:c9 or ether host 00:1b:2b:86:ec:1b or ether host 00:21:1c:98:a4:08 and net 149.83.6.0/24 | grep --line-buffered -B... (5 Replies)
Discussion started by: delphys
5 Replies

9. Shell Programming and Scripting

Insert Text after one, two, three lines & so on..

I want to insert "Text" in each file as a place where I mentioned below "Insert Text Here". These files are something like news of newspaper. Generally, newspaper headlines contain one or two lines. I don't know how it can be identified whether Text is inserted after first line or second line. ... (10 Replies)
Discussion started by: imranrasheedamu
10 Replies

10. UNIX for Beginners Questions & Answers

Help with a question in one of my exercises

Hello, so I'm taking unix in one of my classes and I've been having fun, but I got stuck at this one question that I'm supposed to know how to answer but I can't wrap my head around it, I figured I'll post it here and see if someone can shed some light into what I'm doing wrong. Here's the... (1 Reply)
Discussion started by: hiwolf25
1 Replies
STDIO(3)						     Library Functions Manual							  STDIO(3)

NAME
stdio - standard buffered input/output package SYNOPSIS
#include <stdio.h> FILE *stdin; FILE *stdout; FILE *stderr; DESCRIPTION
The functions in the standard I/O library constitute a user-level buffering scheme. The in-line macros getc and putc(3) handle characters quickly. The higher level routines gets, fgets, scanf, fscanf, fread, puts, fputs, printf, fprintf, fwrite all use getc and putc; they can be freely intermixed. A file with associated buffering is called a stream, and is declared to be a pointer to a defined type FILE. Fopen(3) creates certain descriptive data for a stream and returns a pointer to designate the stream in all further transactions. There are three normally open streams with constant pointers declared in the include file and associated with the standard open files: stdin standard input file stdout standard output file stderr standard error file A constant `pointer' NULL (0) designates no stream at all. An integer constant EOF (-1) is returned upon end of file or error by integer functions that deal with streams. Any routine that uses the standard input/output package must include the header file <stdio.h> of pertinent macro definitions. The func- tions and constants mentioned in the standard I/O manual pages are declared in the include file and need no further declaration. The con- stants, and the following `functions' are implemented as macros; redeclaration of these names is perilous: clearerr, getc, getchar, putc, putchar, feof, ferror, fileno. SEE ALSO
open(2), close(2), read(2), write(2), fclose(3), ferror(3), fopen(3), fread(3), fseek(3), getc(3), gets(3), printf(3), putc(3), puts(3), scanf(3), setbuf(3), ungetc(3). DIAGNOSTICS
The value EOF is returned uniformly to indicate that a FILE pointer has not been initialized with fopen, input (output) has been attempted on an output (input) stream, or a FILE pointer designates corrupt or otherwise unintelligible FILE data. For purposes of efficiency, this implementation of the standard library has been changed to line buffer output to a terminal by default and attempts to do this transparently by flushing the output whenever a read(2) from the standard input is necessary. This is almost always transparent, but may cause confusion or malfunctioning of programs which use standard i/o routines but use read(2) themselves to read from the standard input. In cases where a large amount of computation is done after printing part of a line on an output terminal, it is necessary to fflush(3) the standard output before going off and computing so that the output will appear. BUGS
The standard buffered functions do not interact well with certain other library and system functions, especially fork and abort. LIST OF FUNCTIONS
Name Appears on Page Description clearerr ferror(3) stream status inquiries fclose fclose(3) close or flush a stream fdopen fopen(3) open a stream feof ferror(3) stream status inquiries ferror ferror(3) stream status inquiries fflush fclose(3) close or flush a stream fgetc getc(3) get character or word from stream fgets gets(3) get a string from a stream fileno ferror(3) stream status inquiries fopen fopen(3) open a stream fprintf printf(3) formatted output conversion fputc putc(3) put character or word on a stream fputs puts(3) put a string on a stream fread fread(3) buffered binary input/output freopen fopen(3) open a stream fscanf scanf(3) formatted input conversion fseek fseek(3) reposition a stream ftell fseek(3) reposition a stream fwrite fread(3) buffered binary input/output getc getc(3) get character or word from stream getchar getc(3) get character or word from stream gets gets(3) get a string from a stream getw getc(3) get character or word from stream printf printf(3) formatted output conversion putc putc(3) put character or word on a stream putchar putc(3) put character or word on a stream puts puts(3) put a string on a stream putw putc(3) put character or word on a stream rewind fseek(3) reposition a stream scanf scanf(3) formatted input conversion setbuf setbuf(3) assign buffering to a stream setvbuf setbuf(3) assign buffering to a stream snprintf printf(3) formatted output conversion sprintf printf(3) formatted output conversion sscanf scanf(3) formatted input conversion ungetc ungetc(3) push character back into input stream vfprintf printf(3) formatted output conversion vfscanf scanf(3) formatted input conversion vprintf printf(3) formatted output conversion vscanf scanf(3) formatted input conversion vsnprintf printf(3) formatted output conversion vsprintf printf(3) formatted output conversion vsscanf scanf(3) formatted input conversion 4th Berkeley Distribution May 13, 1986 STDIO(3)
All times are GMT -4. The time now is 08:06 PM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy