Scanf String Dev C++

  • The C Standard Library
  1. C Scanf Formats
  2. Scanf String Dev C Pdf
  3. Scanf C Function
  • C Standard Library Resources

The printf and scanf functions are required for output and input respectively in C. Both of these functions are library functions and are defined in the stdio.h header file. Details about the return values of the printf and scanf functions are given as follows: The printf function. The printf function is used for printing the output.

  • C Programming Resources
  • Selected Reading

Description

The C library function int scanf(const char *format, ...) reads formatted input from stdin.

Declaration

Following is the declaration for scanf() function.

Parameters

Dev c++ online
  • format − This is the C string that contains one or more of the following items −

    Whitespace character, Non-whitespace character and Format specifiers. A format specifier will be like [=%[*][width][modifiers]type=] as explained below −

Sr.No.Argument & Description
1

*

This is an optional starting asterisk indicates that the data is to be read from the stream but ignored, i.e. it is not stored in the corresponding argument.

2

width

This specifies the maximum number of characters to be read in the current reading operation.

3

modifiers

Specifies a size different from int (in the case of d, i and n), unsigned int (in the case of o, u and x) or float (in the case of e, f and g) for the data pointed by the corresponding additional argument: h : short int (for d, i and n), or unsigned short int (for o, u and x) l : long int (for d, i and n), or unsigned long int (for o, u and x), or double (for e, f and g) L : long double (for e, f and g)

4

type

A character specifying the type of data to be read and how it is expected to be read. See next table.

C Scanf Formats

fscanf type specifiers

typeQualifying InputType of argument
cSingle character: Reads the next character. If a width different from 1 is specified, the function reads width characters and stores them in the successive locations of the array passed as argument. No null character is appended at the end.char *
dDecimal integer: Number optionally preceded with a + or - signint *
e, E, f, g, GFloating point: Decimal number containing a decimal point, optionally preceded by a + or - sign and optionally followed by the e or E character and a decimal number. Two examples of valid entries are -732.103 and 7.12e4float *
oOctal Integer:int *
sString of characters. This will read subsequent characters until a whitespace is found (whitespace characters are considered to be blank, newline and tab).char *
uUnsigned decimal integer.unsigned int *
x, XHexadecimal Integerint *
  • additional arguments − Depending on the format string, the function may expect a sequence of additional arguments, each containing one value to be inserted instead of each %-tag specified in the format parameter, if any. There should be the same number of these arguments as the number of %-tags that expect a value.

Return Value

On success, the function returns the number of items of the argument list successfully read. If a reading error happens or the end-of-file is reached while reading, the proper indicator is set (feof or ferror) and, if either happens before any data could be successfully read, EOF is returned.

Example

The following example shows the usage of scanf() function.

Let us compile and run the above program that will produce the following result in interactive mode −

-->

This information applies to the interpretation of format strings in the scanf family of functions, including the secure versions such as scanf_s. These functions normally assume the input stream is divided into a sequence of tokens. Tokens are separated by whitespace (space, tab, or newline), or for numerical types, by the natural end of a numerical data type as indicated by the first character that can't be converted into numerical text. However, the width specification may be used to cause parsing of the input to stop before the natural end of a token.

The width specification consists of characters between the % and the type field specifier, which may include a positive integer called the width field and one or more characters indicating the size of the field, which may also be considered as modifiers of the type of the field, such as an indication of whether the integer type is short or long. Such characters are referred to as the size prefix.

The width field

The width field is a positive decimal integer that controls the maximum number of characters to be read for that field. No more than width characters get converted and stored in the corresponding argument. Fewer than width characters may be read if a whitespace character or a character that can't be converted according to the given format occurs before width is reached.

The width specification is separate and distinct from the buffer size argument required by the secure versions of these functions (for instance, scanf_s, wscanf_s, and so on). In the following example, the width specification is 20, indicating that up to 20 characters are to be read from the input stream. The buffer length is 21, which includes room for the possible 20 characters plus the null terminator:

If the width field isn't used, scanf_s attempts to read the entire token into the string. If the size specified isn't large enough to hold the entire token, nothing gets written to the destination string. If the width field is specified, then the first width characters in the token get written to the destination string, along with the null terminator.

The size prefix

The optional prefixes h, hh, l, ll, I64, and L indicate the size of the argument (long or short, single-byte character or wide character, depending upon the type character that they modify). These format-specification characters are used with type characters in scanf or wscanf functions to specify interpretation of arguments as shown in the following table. The type prefix I64 is a Microsoft extension and isn't compatible with Standard C. The type characters and their meanings are described in the 'Type Characters for scanf functions' table in scanf Type Field Characters.

Note

The h, l, and L prefixes are Microsoft extensions when used with data of type char.

Scanf String Dev C Pdf

Size prefixes for scanf and wscanf format-type specifiers

To specifyUse prefixWith type specifier
doublele, E, f, g, or G
long double (same as double)Le, E, f, g, or G
long intld, i, o, x, or X
long unsigned intlu
long longlld, i, o, x, or X
short inthd, i, o, x, or X
short unsigned inthu
charhhd, i, o, x, or X
unsigned charhhu
int64I64d, i, o, u, x, or X
Single-byte character with scanfhc or C
Single-byte character with wscanfhc or C
Wide character with scanflc or C
Wide character with wscanflc, or C
Single-byte character string with scanfhs or S
Single-byte character string with wscanfhs or S
Wide character string with scanfls or S
Wide character string with wscanfls or S

The following examples use h and l with scanf_s functions and wscanf_s functions:

If using an unsecure function in the scanf family, omit the size parameter indicating the buffer length of the preceding argument.

Reading undelimited strings

To read strings not delimited by whitespace characters, a set of characters in brackets ([ ]) can be substituted for the s (string) type character. The set of characters in brackets is referred to as a control string. The corresponding input field is read up to the first character that doesn't appear in the control string. If the first character in the set is a caret (^), the effect is reversed: The input field is read up to the first character that does appear in the rest of the character set.

Both %[a-z] and %[z-a] are interpreted as equivalent to %[abcde...z]. It's a common scanf function extension, but isn't required by Standard C.

Reading unterminated strings

To store a string without storing a terminating null character ('0'), use the specification %Nc, where N is a decimal integer. In this case, the c type character indicates that the argument is a pointer to a character array. The next N characters are read from the input stream into the specified location, and no null character ('0') is appended. If N isn't specified, its default value is 1.

When scanf stops reading a field

The scanf function scans each input field, character by character. It may stop reading a particular input field before it reaches a space character for one of several reasons:

Scanf C Function

  • The specified width has been reached.

  • The next character can't be converted as specified.

  • The next character conflicts with a character in the control string that it's supposed to match.

  • The next character fails to appear in a given character set.

For whatever reason, when the scanf function stops reading an input field, the next input field is considered to begin at the first unread character. The conflicting character, if any, is considered unread. It's the first character of the next input field, or the first character in subsequent read operations on the input stream.

Scanf

See also

scanf, _scanf_l, wscanf, _wscanf_l
scanf_s, _scanf_s_l, wscanf_s, _wscanf_s_l
Format Specification Fields: scanf and wscanf Functions
scanf Type Field Characters