CCCCCCCCCCCC
资源文件列表:

Pointers on C.pdf 7.09MB
资源介绍:
CC
.,
POINTERS ON C
-- --- ------ - -----------

1
A Quick Start
1.1 Introduction
It is always difficult to start describing a programming language because little
details do not make much sense until one knows enough to understand the "big
picture." In this chapter, I try to give you a glimpse of the big picture by looking at a
sample program and explaining its workings line by line. This sample program also
shows you how familiar procedures are accomplished in C. This information plus the
other topics discussed in the chapter introduce you to the basics of the C language so
that you can begin writing useful programs.
The program we dissect reads text from the standard input, modifies it, and
writes it to the standard output. Program l.l first reads a list of column numbers. These
numbers are pairs and indicate ranges of columns in the input line. The list is
terminated with a negative number. The remaining input lines are read and printed,
then the selected columns from the input lines are extracted and primed. Note that the
first column in a line is number zero. For example, if the input is
4 9 12 20 -1
abcdefghijklmnopqrstuvwxyz
Hello there, how are you?
I
am
fine,
thanks.
See you!
Bye
then the program would produce:
Original input
:
abcdefghijklmnopqxstuvwxyz
Rearranged
line:
efghijmnopqrstu

Chapter 1 A Quick Start
2
Original input
:
Hello
there,
how
are you?
Rearranged
line:
o ther
how
are
Original
input
: I
am
fine,
thanks.
Rearranged
line: fine,
thanks.
Original
input
:
See
you!
Rearranged
line:
you!
Original
input
:
Bye
Rearranged
line:
The important point about this program is that it illustrates most of the basic
techniques you need to know to begin writing C programs.
/*
** This program reads input lines from standard input and prints
**
each
input
line,
followed by
just
some
portions of the
line,
to
** the standard output.
**
**
The
first
input
is
a
lint of
column numbers, which ends with a
**
negative number. The column numbers are paired and
specify
**
ranges
of
columns from
the input line that are to
be
printed.
** For example, 0 3 10 12 -1 indicates
that
only columns 0 through 3
**
and columns 10
through
12
will
be
printed.
*/
#include <stdio.h>
#inc1ude <stdlib.h>
#include <string.h>
#define
MAX_COLS
20
/*
max
# of columns to process
*/
#define
MAX_INPUT
1000
/*
max
len of input
&
output lines
*/
int
read_column_numbers(
int
columns[],
int
max
);
void rearrange( char *output, char const
*input,
int
n_columns,
int
const columns[]
);
int
main( void
)
{
int
n_columns;
/*
#
of
columns
to
process
*/
int
columns[MAX_COLS];
/*
the columns
to
process
*/
char input[MAX_INPUT];
/*array for input line */
char output[MAX_INPUT];
/*array for
output
line */
Program 1.1 Rearrange characters continue.

1.1 Introduction
3
/*
**
Read the
list
of
column numbers
*/
n_columns = read_column_numbers( columns, MAX_COLS
);
/*
**
Read, process and
print
the remaining lines of input
*/
while( gets(input
)
!=
NULL
){
printf(
"Original input
:
%s\n", input
);
rearrange( output, input,
n_columns, columns
);
printf(
"Rearranged
line:
%s\n", output
);
}
returnEXIT_SUCCESS;
}
/*
**
Read
the
list
of
column numbers, ignoring any
beyond
the specified
** maximum.
*/
int
read_column_numbers(
int
columns[],
int
max
)
{
int
num =
0;
int ch;
/*
**
Get the numbers, stopping
at
eof
or
when a number
is
<
0.
*/
while(
num < max &&
scanf( "%d", &columns[num]
)
==
1
&&columns[num] >= 0
)
num +=1;
/*
**
Make
sure
we have an even number
of inputs,
as
they are
** supposed to be paired.
*/
if(
num
%
2
!=
0
){
puts( "Last
column number
is not paired."
);
exit(
EXIT_FAILURE
);
}
/*
** Discard the rest of the line that contained the
final
Program 1.1 Rearrange characters continue.

4
Chapter 1 A Quick Start
** number.
*/
while( (ch
=
getchar()) !=
EOF && ch
!=
'\n' )
;
return num;
}
/*
** Process a line of input by concatenating the characters from
**
the indicated columns.
The
output
line is
the
NUL
terminated,
*/
void
rearrange( char *output, char const
*input,
in n_columns,
int
const columns[]
)
{
int
col;
/*
subscript for
columns
array
*/
int
output_col;
/*
output column counter
*/
int
len;
/*
length of input line
*/
len
=
strlen( input
);
output_col
=
0;
/*
**
Process each
pair of
column numbers.
*/
for(
col = 0; col < n_columns; col += 2
){
int
nchars = columns[col + 1] – columns[col] + 1;
/*
**
If
the input line
isn't
this long or the output
**
array
is
full,
we're done
*/
if(
columns[col]
>=
len
||
output_col
== MAX_INPUT
– 1
)
break;
/*
**
If
there
isn't
room
in the output array, only
copy
**
what
will
fit.
*/
if(
output_col
+
nchars
> MAX_INPUT
– 1)
nchars
= MAX_INPUT
– output_col – 1;
/*
Program 1.1 Rearrange characters continue.