INFO: scanf() with %i and a Leading 0 Gives Octal Conversion (49573)
The information in this article applies to:
- The C Run-Time (CRT), when used with:
- Microsoft Visual C++ for Windows, 16-bit edition 1.0
- Microsoft Visual C++ for Windows, 16-bit edition 1.5
- Microsoft Visual C++, 32-bit Editions 1.0
- Microsoft Visual C++, 32-bit Editions 2.0
- Microsoft Visual C++, 32-bit Editions 4.0
- Microsoft Visual C++, 32-bit Editions 5.0
- Microsoft Visual C++, 32-bit Editions 6.0
This article was previously published under Q49573 SUMMARY
In Microsoft C, scanf() may return different results when using the %i
switch than when using the %d switch. With the %i switch, reading in a
number that begins with a 0 (zero) will cause the number to be treated as
an octal number. The %d switch treats all numbers as decimal numbers.
The %i switch has the capability of reading in decimal, octal, and
hexadecimal numbers. Hexadecimal numbers are specified with the 0x in front
of the number, while octal numbers are specified with the 0 in front of
them. If you want only decimal numbers to be read in, use the %d switch.
This is expected behavior and occurs with the entire scanf() family.
Modification Type: | Major | Last Reviewed: | 12/12/2003 |
---|
Keywords: | kbCRT kbinfo KB49573 kbAudDeveloper |
---|
|