473,725 Members | 2,173 Online
Bytes | Software Development & Data Engineering Community
+ Post

Home Posts Topics Members FAQ

difference between scanf("%i") and scanf("%d") ??? perhaps bug inVS2005?

Hi,

Today I got a really strange problem... I've made myself a data-file and
I read in data from that file....

When I read something like this line:

03 04 05, 00 04 01, 05 03 07, 08 03 00, 09 06 03 ... etc.

with something like scanf("%i %i %i, ", &var1, &var2, &var3);

then it stopped reading data starting with "08", "09" etc... But
everything such as "07" and below worked...

Then I tried scanf("%d %d %d, ", &var1, &var2, &var3);

And the program WORKED!?!!?

Why?

I looked in my C-book and it says absolutetly the same about using %i as
%d.... I'm too tired to cut down my progrm and post a small version of
it now, and it might be that's even unnecessary because somebody know
what's happening...

Compiler: Visual studio 2005, windows xp. I suspect perhaps it's a bug,
if my C book is right that there isn't any difference between %i and %d?
Best regards / Med venlig hilsen
Martin Jørgensen

--
---------------------------------------------------------------------------
Home of Martin Jørgensen - http://www.martinjoergensen.dk
Apr 26 '06 #1
18 11847
"Martin Jørgensen" <un*********@sp am.jay.net> wrote in message
news:v3******** ****@news.tdc.d k...
Today I got a really strange problem... I've made myself a data-file and I
read in data from that file....

When I read something like this line:

03 04 05, 00 04 01, 05 03 07, 08 03 00, 09 06 03 ... etc.

with something like scanf("%i %i %i, ", &var1, &var2, &var3);

then it stopped reading data starting with "08", "09" etc... But
everything such as "07" and below worked...

Then I tried scanf("%d %d %d, ", &var1, &var2, &var3);

And the program WORKED!?!!?

Why?

I looked in my C-book and it says absolutetly the same about using %i as
%d.... I'm too tired to cut down my progrm and post a small version of it
now, and it might be that's even unnecessary because somebody know what's
happening...

Compiler: Visual studio 2005, windows xp. I suspect perhaps it's a bug, if
my C book is right that there isn't any difference between %i and %d?


%d effectively calls strtol with a base of 10, so it assumes all numbers
it reads are decimal. %d effectively calls strtol with a base of 0, so it
adapts the base according to any prefix (0, 0x, or 0X) it sees. Thus 08
is an ill formed octal integer.

HTH,

P.J. Plauger
Dinkumware, Ltd.
http://www.dinkumware.com
Apr 26 '06 #2
P.J. Plauger wrote:
"Martin Jørgensen" <un*********@sp am.jay.net> wrote in message
news:v3******** ****@news.tdc.d k...
Today I got a really strange problem... I've made myself a data-file and I
read in data from that file....

When I read something like this line:

03 04 05, 00 04 01, 05 03 07, 08 03 00, 09 06 03 ... etc.

with something like scanf("%i %i %i, ", &var1, &var2, &var3);

then it stopped reading data starting with "08", "09" etc... But
everything such as "07" and below worked...

Then I tried scanf("%d %d %d, ", &var1, &var2, &var3);

And the program WORKED!?!!?

Why?

I looked in my C-book and it says absolutetly the same about using %i as
%d.... I'm too tired to cut down my progrm and post a small version of it
now, and it might be that's even unnecessary because somebody know what's
happening...

Compiler: Visual studio 2005, windows xp. I suspect perhaps it's a bug,if
my C book is right that there isn't any difference between %i and %d?


%d effectively calls strtol with a base of 10, so it assumes all numbers
it reads are decimal. %d effectively calls strtol with a base of 0, so it
adapts the base according to any prefix (0, 0x, or 0X) it sees. Thus 08
is an ill formed octal integer.


Your second %d should be a %i.

Robert Gamble

Apr 26 '06 #3
"P.J. Plauger" <pj*@dinkumware .com> writes:
"Martin Jørgensen" <un*********@sp am.jay.net> wrote in message
news:v3******** ****@news.tdc.d k...
Today I got a really strange problem... I've made myself a data-file and I
read in data from that file....

When I read something like this line:

03 04 05, 00 04 01, 05 03 07, 08 03 00, 09 06 03 ... etc.

with something like scanf("%i %i %i, ", &var1, &var2, &var3);

then it stopped reading data starting with "08", "09" etc... But
everything such as "07" and below worked...

Then I tried scanf("%d %d %d, ", &var1, &var2, &var3);

And the program WORKED!?!!?
[snip
%d effectively calls strtol with a base of 10, so it assumes all numbers
it reads are decimal. %d effectively calls strtol with a base of 0, so it
adapts the base according to any prefix (0, 0x, or 0X) it sees. Thus 08
is an ill formed octal integer.


And with %d, "010" has the value 8, not 10.

Decide whether you want numbers with leading '0' to be treated as
octal or decimal.

--
Keith Thompson (The_Other_Keit h) ks***@mib.org <http://www.ghoti.net/~kst>
San Diego Supercomputer Center <*> <http://users.sdsc.edu/~kst>
We must do something. This is something. Therefore, we must do this.
Apr 26 '06 #4
On 2006-04-26, Martin Jørgensen <un*********@sp am.jay.net> wrote:
Hi,

Today I got a really strange problem... I've made myself a data-file and
I read in data from that file....

When I read something like this line:

03 04 05, 00 04 01, 05 03 07, 08 03 00, 09 06 03 ... etc.

with something like scanf("%i %i %i, ", &var1, &var2, &var3);

then it stopped reading data starting with "08", "09" etc... But
everything such as "07" and below worked...

Then I tried scanf("%d %d %d, ", &var1, &var2, &var3);

And the program WORKED!?!!?

Why?


Maybe it's something to do with octal? A leading 0 is sometimes used for
octal (in C for example) 01 .. 07 are valid octal, 08 isn't.
Apr 26 '06 #5
Keith Thompson wrote:
"P.J. Plauger" <pj*@dinkumware .com> writes:
"Martin Jørgensen" <un*********@sp am.jay.net> wrote in message
news:v3******** ****@news.tdc.d k...
Today I got a really strange problem... I've made myself a data-file and I
read in data from that file....

When I read something like this line:

03 04 05, 00 04 01, 05 03 07, 08 03 00, 09 06 03 ... etc.

with something like scanf("%i %i %i, ", &var1, &var2, &var3);

then it stopped reading data starting with "08", "09" etc... But
everything such as "07" and below worked...

Then I tried scanf("%d %d %d, ", &var1, &var2, &var3);

And the program WORKED!?!!?
[snip
%d effectively calls strtol with a base of 10, so it assumes all numbers
it reads are decimal. %d effectively calls strtol with a base of 0, so it
adapts the base according to any prefix (0, 0x, or 0X) it sees. Thus 08
is an ill formed octal integer.


And with %d, "010" has the value 8, not 10.


No, with %d, "010" has the value 10. With %i, "010" has the value 8.
Decide whether you want numbers with leading '0' to be treated as
octal or decimal.


Robert Gamble

Apr 26 '06 #6
Martin Jxrgensen <un*********@sp am.jay.net> writes:
When I read something like this line:

03 04 05, 00 04 01, 05 03 07, 08 03 00, 09 06 03 ... etc.

with something like scanf("%i %i %i, ", &var1, &var2, &var3);

then it stopped reading data starting with "08", "09" etc... But
everything such as "07" and below worked...

Then I tried scanf("%d %d %d, ", &var1, &var2, &var3);


%d reads a decimal integer.
%i reads a C-like integer, so that a leading 0 means "octal".
Your reference manual should have told you this.
--
"Some programming practices beg for errors;
this one is like calling an 800 number
and having errors delivered to your door."
--Steve McConnell
Apr 26 '06 #7
"Robert Gamble" <rg*******@gmai l.com> writes:
Keith Thompson wrote:
"P.J. Plauger" <pj*@dinkumware .com> writes: [snip]
> %d effectively calls strtol with a base of 10, so it assumes all numbers
> it reads are decimal. %d effectively calls strtol with a base of 0, so it
> adapts the base according to any prefix (0, 0x, or 0X) it sees. Thus 08
> is an ill formed octal integer.


And with %d, "010" has the value 8, not 10.


No, with %d, "010" has the value 10. With %i, "010" has the value 8.
Decide whether you want numbers with leading '0' to be treated as
octal or decimal.


Whoops! You're right, of course. Thanks for catching my error.

--
Keith Thompson (The_Other_Keit h) ks***@mib.org <http://www.ghoti.net/~kst>
San Diego Supercomputer Center <*> <http://users.sdsc.edu/~kst>
We must do something. This is something. Therefore, we must do this.
Apr 26 '06 #8
Ben Pfaff wrote:
Martin Jxrgensen <un*********@sp am.jay.net> writes:

When I read something like this line:

03 04 05, 00 04 01, 05 03 07, 08 03 00, 09 06 03 ... etc.

with something like scanf("%i %i %i, ", &var1, &var2, &var3);

then it stopped reading data starting with "08", "09" etc... But
everything such as "07" and below worked...

Then I tried scanf("%d %d %d, ", &var1, &var2, &var3);

%d reads a decimal integer.
%i reads a C-like integer, so that a leading 0 means "octal".
Your reference manual should have told you this.


Now I double-checked my book: "C primer plus, 5th edition".

It simply *doesn't* tell this... What a piece of junk...
It says (table 4.6, p.117):

%d = interpret input as a signed decimal integer
.. . .
%i = interpret input as a signed decimal integer
%o = interpret input as a signed octal integer
%x = interpret input as a signed hexadecimal integer
So the above is wrong?

And what are %o and %x for if you can do exactly the same with %0i and
probably %x-something? ? ?

Best regards / Med venlig hilsen
Martin Jørgensen

--
---------------------------------------------------------------------------
Home of Martin Jørgensen - http://www.martinjoergensen.dk
Apr 27 '06 #9

Martin Jørgensen wrote:
Ben Pfaff wrote:
Martin Jxrgensen <un*********@sp am.jay.net> writes:

When I read something like this line:

03 04 05, 00 04 01, 05 03 07, 08 03 00, 09 06 03 ... etc.

with something like scanf("%i %i %i, ", &var1, &var2, &var3);

then it stopped reading data starting with "08", "09" etc... But
everything such as "07" and below worked...

Then I tried scanf("%d %d %d, ", &var1, &var2, &var3);

%d reads a decimal integer.
%i reads a C-like integer, so that a leading 0 means "octal".
Your reference manual should have told you this.


Now I double-checked my book: "C primer plus, 5th edition".

It simply *doesn't* tell this... What a piece of junk...
It says (table 4.6, p.117):

%d = interpret input as a signed decimal integer
. . .
%i = interpret input as a signed decimal integer


%i will interpret the input as either a signed decimal, octal, or
hexadecimal integer based on the input format.

If the input has a leading 0, it will attempt to interpret it as an
octal value, and if the input has a leading 0x, it will attempt to
interpret it as a hexadecimal value.

Time for a new reference manual, I think. I use Harbison & Steele's
"C: A Reference Manual", currently at 5th edition.
%o = interpret input as a signed octal integer
%x = interpret input as a signed hexadecimal integer
So the above is wrong?

And what are %o and %x for if you can do exactly the same with %0i and
probably %x-something? ? ?


%i is useful when you don't necessarily know ahead of time if your
input is going to be formatted as decimal, octal, or hex, and you want
to be able to handle it correctly. You'd use %d, %o, and %x when you
know the input is always supposed to be formatted in one particular way
(i.e., you're *only* reading hex-formatted input).

Apr 27 '06 #10

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

4
13253
by: 321ConTact | last post by:
I have to find zipcodes within a given mileage range (25, 50, etc). I know it's possible to use the longitude/latitude to find this, and I have that for the zipcodes, but does anyone have a "ready made" formula? I know it has something to do with the sine/cosine, but the "signs" aren't clear enough to me (neither are the wonders). Thanks in advance for the wisdom. J
4
1644
by: Richard Shea | last post by:
Hi - I've writing a Python script which has a query which looks like this ... select * from T where C1 not in (1,2,3) .... C1 is a numeric column so elements of (1,2,3) must not be quoted like this ('1','2','3') and of course they must not be quoted like this ('1,2,3'). I'm using 'scanf' style substitution into the SQL, eg ...
13
3291
by: Jalal | last post by:
I am trying to use numeric_limits<double>::min() in an MFC application in Microsoft Visual C++.NET 2003. I am having some difficulties here. The following are the parts of a simple program I wrote and corresponding error massages. I am confused here. Similar codes work fine in Win32 Console Project. Can you please help me to resolve this? Thank you for your helps. Best Regards, Jalal
24
2755
by: jrefactors | last post by:
I have an upload file operation in the web application. UploadForm.jsp is the form, and UploadAction.jsp is the form processing. The web server is Websphere. //UploadForm.jsp <FORM NAME="InputForm" ACTION="UploadAction.jsp" METHOD="POST" enctype=multipart/form-data> <input type="file" name="fileName"> //etc ...
1
4177
by: Andrew McNab | last post by:
Hi folks, I have a problem with an MS Access SQL query which is being used in an Access Report, and am wondering if anyone can help. Basically, my query (shown below) gets some records from a couple of tables in my database using INNER JOINS and the WHERE clause to specify the required constraints. However, I also want to read two fields from a *single* record from a table called 'Locations' and then apply one of these field's values...
72
4210
by: Paminu | last post by:
In math this expression: (a < b) && (b < c) would be described as: a < b < c But why is it that in C these two expressions evaluate to something different for the same values of a, b and c?
21
7851
by: comp.lang.tcl | last post by:
set php {<? print_r("Hello World"); ?>} puts $php; # PRINTS OUT <? print_r("Hello World"); ?> puts When I try this within TCL I get the following error:
1
8395
by: abrown07 | last post by:
#include<stdio.h> #include<math.h> int main(void) { double Yeild, Heads, Seedhead, Size;
1
1474
by: Kamalesh kumar | last post by:
this is the statement i encountered . . . fscanf(fp,"%",str1); where str1 is a str1 can someone please unconfuse me on whats the difference between using a %c and a % in reading strings ? thanks
3
13100
by: lingjun | last post by:
Hi, I am taking my first programing course in college... and I am completely lost on this assignment. I am not sure what is wrong with my current code. Any help will be appreciate it... thanks! I keep on getting the follow error messages when I try to compile it. test.c:3: error: syntax error before numeric constant test.c: In function `main': test.c:18: error: `next_day' undeclared (first use in this function) test.c:18: error:...
0
8888
marktang
by: marktang | last post by:
ONU (Optical Network Unit) is one of the key components for providing high-speed Internet services. Its primary function is to act as an endpoint device located at the user's premises. However, people are often confused as to whether an ONU can Work As a Router. In this blog post, we’ll explore What is ONU, What Is Router, ONU & Router’s main usage, and What is the difference between ONU and Router. Let’s take a closer look ! Part I. Meaning of...
0
8752
by: Hystou | last post by:
Most computers default to English, but sometimes we require a different language, especially when relocating. Forgot to request a specific language before your computer shipped? No problem! You can effortlessly switch the default language on Windows 10 without reinstalling. I'll walk you through it. First, let's disable language synchronization. With a Microsoft account, language settings sync across devices. To prevent any complications,...
1
9176
by: Hystou | last post by:
Overview: Windows 11 and 10 have less user interface control over operating system update behaviour than previous versions of Windows. In Windows 11 and 10, there is no way to turn off the Windows Update option using the Control Panel or Settings app; it automatically checks for updates and installs any it finds, whether you like it or not. For most users, this new feature is actually very convenient. If you want to control the update process,...
0
9113
tracyyun
by: tracyyun | last post by:
Dear forum friends, With the development of smart home technology, a variety of wireless communication protocols have appeared on the market, such as Zigbee, Z-Wave, Wi-Fi, Bluetooth, etc. Each protocol has its own unique characteristics and advantages, but as a user who is planning to build a smart home system, I am a bit confused by the choice of these technologies. I'm particularly interested in Zigbee because I've heard it does some...
0
8097
agi2029
by: agi2029 | last post by:
Let's talk about the concept of autonomous AI software engineers and no-code agents. These AIs are designed to manage the entire lifecycle of a software development project—planning, coding, testing, and deployment—without human intervention. Imagine an AI that can take a project description, break it down, write the code, debug it, and then launch it, all on its own.... Now, this would greatly impact the work of software developers. The idea...
1
6702
isladogs
by: isladogs | last post by:
The next Access Europe User Group meeting will be on Wednesday 1 May 2024 starting at 18:00 UK time (6PM UTC+1) and finishing by 19:30 (7.30PM). In this session, we are pleased to welcome a new presenter, Adolph Dupré who will be discussing some powerful techniques for using class modules. He will explain when you may want to use classes instead of User Defined Types (UDT). For example, to manage the data in unbound forms. Adolph will...
0
6011
by: conductexam | last post by:
I have .net C# application in which I am extracting data from word file and save it in database particularly. To store word all data as it is I am converting the whole word file firstly in HTML and then checking html paragraph one by one. At the time of converting from word file to html my equations which are in the word document file was convert into image. Globals.ThisAddIn.Application.ActiveDocument.Select();...
2
2635
muto222
by: muto222 | last post by:
How can i add a mobile payment intergratation into php mysql website.
3
2157
bsmnconsultancy
by: bsmnconsultancy | last post by:
In today's digital era, a well-designed website is crucial for businesses looking to succeed. Whether you're a small business owner or a large corporation in Toronto, having a strong online presence can significantly impact your brand's success. BSMN Consultancy, a leader in Website Development in Toronto offers valuable insights into creating effective websites that not only look great but also perform exceptionally well. In this comprehensive...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.