سؤال

أنا أحاول أن أجد طريقة جيدة الطباعة الرائدة 0 ، مثل 01001 عن الرمز البريدي.بينما سيكون العدد تخزين 1001, ما هو وسيلة جيدة للقيام بذلك ؟

فكرت باستخدام كلتا الحالتين البيانات/إذا ثم معرفة كم عدد أرقام العدد ومن ثم تحويله إلى فحم مجموعة إضافية 0 للطباعة ولكن أنا لا يمكن أن تساعد ولكن أعتقد أنه قد يكون هناك طريقة للقيام بذلك مع printf شكل الجملة التي هي التملص مني.

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

المحلول

printf("%05d", zipCode);

نصائح أخرى

الحل الصحيح هو لتخزين الرمز البريدي في قاعدة البيانات كسلسلة.على الرغم من أنه قد يبدو عدد, ليس.إنه رمز كل جزء له معنى.

عدد هو شيء يمكنك القيام بعملية حسابية على.الرمز البريدي غير ذلك.

قمت بوضع صفر قبل أن الدنيا ميدان العرض:

printf("%05d",zipcode);

الرمز البريدي جدا مترجمة المجال في العديد من البلدان الشخصيات في الرموز البريدية, على سبيل المثال, المملكة المتحدة, كندا.ولذلك في هذا المثال يجب عليك استخدام سلسلة / varchar حقل لتخزين أنه إذا كان في أي نقطة سيكون الشحن أو الحصول على المستخدمين/العملاء/الزبائن/وغيرها من البلدان الأخرى.

لكن في الحالة العامة يجب استخدام الموصى بها الإجابة (printf("%05d", number);).

إذا كنت على *NIX الجهاز:

man 3 printf

هذا وسوف تظهر صفحة دليل ، على غرار:

0 وينبغي أن تكون القيمة صفر مبطن.D, i, o, u, x, X, a, A, e ، ه ، و ، و ، ز ، و ز التحويلات تحويل قيمة مبطن على اليسار مع الأصفار بدلا من الفراغات.إذا كان 0 و - أعلام على حد سواء تظهر ، 0 العلم هو تجاهلها.إذا كانت الدقة يعطى مع الرقمية تحويل (d, i, o, u, x, X), 0 العلم تجاهلها.عن التحويلات الأخرى سلوك غير معرف.

على الرغم من السؤال هو C ، هذا صفحة قد يكون من المساعدات.

sprintf(mystring, "%05d", myInt);

هنا "05" يقول "استخدام 5 أرقام مع أصفار".

printf يسمح مختلف خيارات التنسيق.

مثلا:

printf("leading zeros %05d", 123);

سوف تنقذ نفسك كومة من المشاكل (على المدى الطويل) إذا كنت مخزن الرمز البريدي كسلسلة أحرف, التي هي, بدلا من عدد ، وهي ليست كذلك.

أكثر مرونة..هنا مثال طباعة الصفوف من حق مبررة أرقام مع عرض ثابت, و الفضاء-الحشو.

//---- Header
std::string getFmt ( int wid, long val )
{  
  char buf[64];
  sprintf ( buf, "% *ld", wid, val );
  return buf;
}
#define FMT (getFmt(8,x).c_str())

//---- Put to use
printf ( "      COUNT     USED     FREE\n" );
printf ( "A: %s %s %s\n", FMT(C[0]), FMT(U[0]), FMT(F[0]) );
printf ( "B: %s %s %s\n", FMT(C[1]), FMT(U[1]), FMT(F[1]) );
printf ( "C: %s %s %s\n", FMT(C[2]), FMT(U[2]), FMT(F[2]) );

//-------- Output
      COUNT     USED     FREE
A:      354   148523     3283
B: 54138259 12392759   200391
C:    91239     3281    61423

وظيفة الكلي مصممة بحيث printfs هي أكثر قابلية للقراءة.

إذا كنت بحاجة لتخزين الرمز البريدي في صفيف حرف الرمز البريدي[] , يمكنك استخدام هذا:

snprintf( zipcode, 6, "%05.5d", atoi(zipcode));
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top