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