ما هو الفرق بين محطات التحويل٪ I و٪ D في وظائف io المنسقة (* printf / * scanf)

StackOverflow https://stackoverflow.com/questions/1893490

سؤال

ماهو الفرق بين %d و %i عند استخدامها كمحدد تنسيق في printf?

هل كانت مفيدة؟

المحلول

هم نفس الشيء عند استخدامها للإخراج، على سبيل المثال مع printf.

ومع ذلك، هذه مختلفة عند استخدامها كمحاسب الإدخال على سبيل المثال scanf, ، أين %d يقوم بمسح عدد صحيح كرقم عشري موقوت، ولكن %i الافتراضي إلى عشري ولكن يسمح أيضا بسد عشري (إذا سبق بواسطة 0x) ثم Octal (إذا سبقها 0).

لذا 033 سيكون 27 مع %i لكن 33 مع %d.

نصائح أخرى

هذه متطابقة ل printf لكن مختلفة عن scanf. وبعد ل printf, ، على حد سواء %d و %i تعيين عدد صحيح عشري الموقع. ل scanf, %d و %i يعني أيضا عدد صحيح موقعة ولكن %i inteprects المدخلات كرقم سداسي عشري إذا سبق 0x والكتامال إذا سبقها 0 وأيضا يفسر الإدخال بمثابة عشري.

لا يوجد فرق بين %i و %d شكل محدد ل printf. وبعد يمكننا أن نرى هذا عن طريق الذهاب إلى مشروع C99 قياسي الجزء 7.19.6.1 وظيفة FPRINTF. التي تغطي أيضا printf فيما يتعلق بالتنسيق المحددين ويقول في الفقرة 8:

محطات التحويل ومعانيها هي:

ويشمل الرصاصة التالية:

d,i     The int argument is converted to signed decimal in the style
        [−]dddd. The precision specifies the minimum number of digits to
        appear; if the value being converted can be represented in fewer
        digits, it is expanded with leading zeros. The default precision is
        1. The result of converting a zero value with a precision of zero is
        no characters.

من ناحية أخرى ل scanf هناك فرق، %d افترض قاعدة 10 بينما %i السيارات بالكشف عن القاعدة. يمكننا أن نرى هذا من خلال الذهاب إلى القسم 7.19.6.2 وظيفة FSCANF. التي تغطي scanf فيما يتعلق بالتنسيق محدد، في الفقرة 12 انها تقول:

محطات التحويل ومعانيها هي:

ويشمل ما يلي:

d     Matches an optionally signed decimal integer, whose format is the
      same as expected for the subject sequence of the strtol function with
      the value 10 for the base argument. The corresponding argument shall
      be a pointer to signed integer.

i     Matches an optionally signed integer, whose format is the same as
      expected for the subject sequence of the strtol function with the
      value 0 for the base argument. The corresponding argument shall be a
      pointer to signed integer.

ليس هناك أي في printf - اثنان هما مرادفات.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top