ما هو الفرق بين محطات التحويل٪ I و٪ D في وظائف io المنسقة (* printf / * scanf)
-
19-09-2019 - |
سؤال
ماهو الفرق بين %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
- اثنان هما مرادفات.