سؤال

أنا أعمل على جلب بعض القديم رمز من عام 1998 حتى القرن ال21.واحدة من الخطوات الأولى في عملية تحويل البيانات printf إلى QString المتغيرات.لا يهم كم من المرات كنت ننظر إلى الوراء في printf على الرغم من أنني دائما في نهاية المطاف نسيان شيء واحد أو آخر.لذلك ، من أجل المتعة ، دعونا فك ذلك معا ، ole' مرات ساكي في عملية إنشاء أول قليلا 'printf التمهيدي' بالنسبة ستاكوفيرفلوو.

في رمز ، جئت عبر هذه الأحجار الكريمة قليلا,

printf("%4u\t%016.1f\t%04X\t%02X\t%1c\t%1c\t%4s", a, b, c, d, e, f, g);

كيف المتغيرات a, b, c, d, e, f, g يكون تنسيقها ؟

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

المحلول

داني هو الغالب صحيح.

أ.موقعة عشري الحد الأدنى من 4 حروف, مساحة مبطن
ب.النقطة العائمة, الحد الأدنى 16 أرقام قبل العشرية (0 مبطن), 1 أرقام بعد العلامة العشرية
ج.عرافة الحد الأدنى من 4 حروف, 0 مبطن, رسائل مطبوعة في حالة العلوي
د.نفس أعلاه, ولكن الحد الأدنى 2 الشخصيات
هـ.هـ يفترض أن يكون الباحث ، وتحويلها إلى غير موقعة تشار و المطبوعة
f.نفس ه
ز.وهذا هو المرجح خطأ مطبعي ، 4 ليس له أي تأثير.إذا كانت "%.4s" ، ثم كحد أقصى من 4 شخصيات من السلسلة سيكون المطبوعة.ومن المثير للاهتمام أن نلاحظ أنه في هذه الحالة ، السلسلة لا تحتاج إلى أن تكون فارغة إنهاء.

تحرير: jj33 ويشير 2 أخطاء في ب و ز أعلاه هنا.

نصائح أخرى

@جيسون يوم, أعتقد أن 4 في الماضي %4s هو كبير إذا كان هناك أقل من 4 أحرف.إذا كان هناك أكثر من 4 ، %4s و %s سيكون نفسه ، ولكن مع أقل من 4 حرف g %s من شأنه أن يترك له ما يبرره %4s سيكون من حق مبررة في 4 شار المجال.

ب هو في الواقع الحد الأدنى من 16 حرف على الحقل بأكمله ، بما في ذلك عشري واحد أرقام بعد العلامة العشرية أعتقد (16 مجموع حرف مقابل 18 مجموع حرف)

هنا هو بلدي printf التمهيدي:http://www.pixelbeat.org/programming/gcc/format_specs.html

أنا دائما ترجمة مع الجدار مع دول مجلس التعاون الخليجي التي حذر من أي التطابق بين الموردة printf صيغ المتغيرات.

@jj33, أنت على حق تماما, في كلتا الحالتين.

#include <stdio.h>

int main(int argc, char *argv[]) {
    char *s = "Hello, World";
    char *s2 = "he";

    printf("4s: '%4s'\n", s);
    printf(".4s: '%.4s'\n", s);
    printf("4s2: '%4s'\n", s2);
    printf(".4s2: '%.4s'\n", s2);

    return 0;
}

$ gcc -o foo foo.c
$ ./foo
4s: 'Hello, World'
.4s: 'Hell'
4s2: '  he'
.4s2: 'he'

صيد ثمين!

أ.عشري ، أربعة ارقام كبيرة

ب.غير متأكد

ج.عرافة الحد الأدنى من 4 حروف

د.أيضا hex, الحد الأدنى 2 الشخصيات

هـ.1 حرف

f.سلسلة من الأحرف, الحد الأدنى 4

ما تحتاجه حقا هو الأداة التي تأخذ شكل سلاسل في printf() البيانات وتحولها إلى ما يعادل QString على أساس وظيفة المكالمات.
لا أحد يريد أن تنفق له البرمجيات الحرة التبرع الوقت على تطوير هذه الأداة ؟

نائبا رابط برنامج مجاني خدمة استضافة عقد البرمجية المصدر من هذه الأداة

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