|
|
1.1 root 1: .TH SCANF 3S "19 January 1983"
2: .SH NAME
3: scanf, fscanf, sscanf \- formatted input conversion
4: .SH SYNOPSIS
5: .B #include <stdio.h>
6: .PP
7: .B scanf(format
8: [ , pointer ] . . .
9: .B )
10: .br
11: .B char *format;
12: .PP
13: .B fscanf(stream, format
14: [ , pointer ] . . .
15: .B )
16: .br
17: .SM
18: .B FILE
19: .B *stream;
20: .br
21: .B char *format;
22: .PP
23: .B sscanf(s, format
24: [ , pointer ] . . .
25: .B )
26: .br
27: .B char *s, *format;
28: .SH DESCRIPTION
29: .I Scanf
30: reads from the standard input stream
31: .BR stdin .
32: .I Fscanf
33: reads from the named input
34: .IR stream .
35: .I Sscanf
36: reads from the character string
37: .IR s .
38: Each function reads characters, interprets
39: them according to a format, and stores the results in its arguments.
40: Each expects as arguments
41: a control string
42: .IR format ,
43: described below,
44: and a set of
45: .I pointer
46: arguments
47: indicating where the converted input should be stored.
48: .PP
49: The
50: control string
51: usually contains
52: conversion specifications, which are used to direct interpretation
53: of input sequences.
54: The control string may contain:
55: .TP 4
56: 1.
57: Blanks, tabs or newlines,
58: which match optional white space in the input.
59: .TP 4
60: 2.
61: An ordinary character (not %) which must match
62: the next character of the input stream.
63: .TP 4
64: 3.
65: Conversion specifications, consisting of the
66: character
67: .BR % ,
68: an optional assignment suppressing character
69: .BR * ,
70: an optional numerical maximum field width, and a conversion
71: character.
72: .PP
73: A conversion specification directs the conversion of the
74: next input field; the result
75: is placed in the variable pointed to by the corresponding argument,
76: unless assignment suppression was
77: indicated by
78: .BR * .
79: An input field is defined as a string of non-space characters;
80: it extends to the next inappropriate character or until the field
81: width, if specified, is exhausted.
82: .PP
83: The conversion character indicates the interpretation of the
84: input field; the corresponding pointer argument must
85: usually be of a restricted type.
86: The following conversion characters are legal:
87: .TP 4
88: .B %
89: a single `%' is expected
90: in the input at this point;
91: no assignment is done.
92: .TP 4
93: .B d
94: a decimal integer is expected;
95: the corresponding argument should be an integer pointer.
96: .TP 4
97: .B o
98: an octal integer is expected;
99: the corresponding argument should be a integer pointer.
100: .TP 4
101: .B x
102: a hexadecimal integer is expected;
103: the corresponding argument should be an integer pointer.
104: .ti -0.2i
105: .TP 4
106: .B s
107: a character string is expected;
108: the corresponding argument should be a character pointer
109: pointing to an array of characters large enough to accept the
110: string and a terminating `\e0', which will be added.
111: The input field is terminated by a space character
112: or a newline.
113: .TP 4
114: .B c
115: a character is expected; the
116: corresponding argument should be a character pointer.
117: The normal skip over space characters is suppressed
118: in this case;
119: to read the next non-space character, try
120: `%1s'.
121: If a field width is given, the corresponding argument
122: should refer to a character array, and the
123: indicated number of characters is read.
124: .TP 4
125: \z\fBe\v'1'f\v'-1'\fR
126: a
127: floating point number is expected;
128: the next field is converted accordingly and stored through the
129: corresponding argument, which should be a pointer to a
130: .IR float .
131: The input format for
132: floating point numbers is
133: an optionally signed
134: string of digits
135: possibly containing a decimal point, followed by an optional
136: exponent field consisting of an E or e followed by an optionally signed integer.
137: .TP 4
138: .B [
139: indicates a string not to be delimited by space characters.
140: The left bracket is followed by a set of characters and a right
141: bracket; the characters between the brackets define a set
142: of characters making up the string.
143: If the first character
144: is not circumflex (\|^\|), the input field
145: is all characters until the first character not in the set between
146: the brackets; if the first character
147: after the left bracket is ^, the input field is all characters
148: until the first character which is in the remaining set of characters
149: between the brackets.
150: The corresponding argument must point to a character array.
151: .PP
152: The conversion characters
153: .BR d ,
154: .B o
155: and
156: .B x
157: may be capitalized or preceded by
158: .B l
159: to indicate that a pointer to
160: .B long
161: rather than to
162: .B int
163: is in the argument list.
164: Similarly, the conversion characters
165: .B e
166: or
167: .B f
168: may be capitalized or
169: preceded by
170: .B l
171: to indicate a pointer to
172: .B double
173: rather than to
174: .BR float .
175: The conversion characters
176: .BR d ,
177: .B o
178: and
179: .B x
180: may be preceded by
181: .B h
182: to indicate a pointer to
183: .B short
184: rather than to
185: .BR int .
186: .PP
187: The
188: .I scanf
189: functions return the number of successfully matched and assigned input
190: items.
191: This can be used to decide how many input items were found.
192: The constant
193: .SM
194: .B EOF
195: is returned upon end of input; note that this is different
196: from 0, which means that no conversion was done;
197: if conversion was intended, it was frustrated by an
198: inappropriate character in the input.
199: .PP
200: For example, the call
201: .IP "" 10
202: int i; float x; char name[50];
203: .br
204: scanf("%d%f%s", &i, &x, name);
205: .PP
206: with the input line
207: .IP
208: 25 54.32E\(mi1 thompson
209: .PP
210: will assign to
211: .I i
212: the value
213: 25,
214: .I x
215: the value 5.432, and
216: .I name
217: will contain
218: .IR `thompson\e0' .
219: Or,
220: .IP
221: int i; float x; char name[50];
222: .br
223: scanf("%2d%f%*d%[1234567890]", &i, &x, name);
224: .PP
225: with input
226: .IP
227: 56789 0123 56a72
228: .PP
229: will assign 56 to
230: .IR i ,
231: 789.0 to
232: .IR x ,
233: skip `0123',
234: and place the string `56\e0' in
235: .IR name .
236: The next call to
237: .I getchar
238: will return `a'.
239: .SH "SEE ALSO"
240: atof(3),
241: getc(3S),
242: printf(3S)
243: .SH DIAGNOSTICS
244: The
245: .I scanf
246: functions return
247: .SM
248: .B EOF
249: on end of input,
250: and a short count for missing or illegal data items.
251: .SH BUGS
252: The success of literal matches and suppressed
253: assignments is not directly
254: determinable.
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.