Type specifiers (formatting strings): %d, %ld, %f, %c, %s, %lf

Type specifiers printf/scanf के placeholders हैं, हर data type के लिए एक: %d int, %ld long, %f float, %c char, %s string, %lf double, और गलत जोड़ी आपकी value की जगह garbage print करती है।

10 min read · 10 cards · 3 checks

Read in: English · हिन्दी · ગુજરાતી


Theory

पोशाक वाली party

आप 3 lessons से %d और %f पर भरोसा करते आए हैं। अब इन्हें decode करने का समय है।

यह experiment मन में चलाइए: printf("%d", 78.5);, एक float को int की पोशाक में print करना। Output न 78 है, न 79, बल्कि garbage: शायद -1717986918।

printf यह नहीं जाँचता कि कौन क्या पहने है। Type specifier उसे बताता है कि कच्चे bytes कैसे पढ़ने हैं, और गलत पोशाक में पढ़े bytes बेतुके बन जाते हैं। मेहमानों से पोशाक मिलाना ही आज की पूरी कला है।

Theory

आकार वाली खाली जगहों से fill-in-the-blanks

printf की format string खाली जगहों वाला वाक्य है: "Marks: __, Grade: __"। पर हर खाली जगह का एक आकार है: %d वाली खाली जगह में int बैठता है, %c वाली में एक character, %f वाली में एक decimal। int-आकार वाली खाली जगह में float ठूँसिए और वह बिगड़कर निकलता है, जैसे गोल dabba को चौकोर खाँचे में ठूँसना। खाली जगहें specifiers हैं; आकार मेल खाने चाहिए।

At a glance

Specifier परिवार

SpecifierTypeउदाहरण value
%dint78
%ldlong8930012345
%ffloat (printf: double भी)78.500000
%lfdouble (scanf में ज़रूरी)78.53
%cchar (एक character)A
%sstring (char array)Riya

Practical

एक marksheet, हर specifier

#include <stdio.h>

int main() {
    char name[20] = "Riya";
    int marks = 78;
    float percentage = 78.53;
    char grade = 'A';

    printf("Name : %s\n", name);
    printf("Marks: %d\n", marks);
    printf("Perc : %.2f\n", percentage);
    printf("Grade: %c (ASCII %d)\n", grade, grade);
    return 0;
}

This example runs in Gri-Learn on the web, where you can edit it and see the output.

Think first

एक char, 2 पोशाकें

आख़िरी printf grade को 2 बार print करता है: एक बार %c से और एक बार %d से। char असल में क्या है, यह इस्तेमाल करते हुए उस line का ठीक-ठीक output बताइए।

Show the answer

Grade: A (ASCII 65)

वही variable, वही byte: %c उसे character (A) की तरह पहनाता है, %d उसके number (65) की तरह। कुछ convert नहीं होता; सिर्फ़ पढ़ने की पोशाक बदलती है। यही एक line सबसे साफ़ सबूत है कि char भेस बदले एक ASCII number है, और predict-the-output का चहेता item।

Quiz

printf("%d", 78.5); असल में क्या print करता है?

  1. अनिश्चित garbage: bytes गलत format में पढ़े जाते हैं
  2. 78, C decimal हिस्सा हटा देता है
  3. 79, C इसे round करता है
  4. 78.5, printf अपने आप adjust कर लेता है
Show the answer

अनिश्चित garbage: bytes गलत format में पढ़े जाते हैं

Float के bytes int के lens से पढ़े जाएँ तो बेमतलब हैं: output garbage है और formally undefined behaviour। 78 तक काटने वाला जवाब इसे ASSIGNMENT से गड्डमड्ड करता है (int x = 78.5 वाक़ई काटता है); printf कुछ convert नहीं करता, वह सिर्फ़ bytes को कहे अनुसार पढ़ता है। इन 2 हालतों में फ़र्क़ करना ही examiner टटोल रहे हैं।

Quiz

आप scanf से एक double पढ़ रहे हैं। कौन सा specifier ज़रूरी (REQUIRED) है?

  1. %lf
  2. %f
  3. %d
  4. %s
Show the answer

%lf

scanf को ठीक-ठीक पता होना चाहिए कि वह कितने बड़े डिब्बे को भर रहा है: %f 4 float bytes भरता है, %lf 8 double bytes, इसलिए double को %lf चाहिए ही। यह असंतुलन सबको फँसाता है: printf में %f खुशी-खुशी float और double दोनों print कर देता है। answer sheet के हाशिए के लिए छोटा नियम: scanf सख़्त है, printf उदार है।

Watch out

Marks कहाँ कटते हैं

गलत जोड़ियाँ: floats के साथ %d, ints के साथ %f, दोनों तरफ़ garbage। char पर %c बनाम %d बदल देता है कि क्या दिखेगा (A बनाम 65), देखिए सवाल किसे चाहता है। scanf में यह भूलना कि double के लिए %lf ज़रूरी है। और marks दिलाने वाली एक साफ़ आदत: %.2f 2 decimals print करता है (78.530000 की जगह 78.53), display round होता है, store की गई value अछूती रहती है।

Theory

Unit 1 पूरा हुआ

देखिए marks program अब क्या कर सकता है: typed डिब्बे declare करना, input लेना, operators से गणना, और formatted marksheet print करना, Unit 1 का हर topic अब theory नहीं, अभ्यास है। आज के code में एक छोटी झलक छिपी थी: %s के लिए scanf को & नहीं चाहिए, क्योंकि array का नाम पहले से एक पता है; वह रहस्य Unit 3 (arrays और pointers) में खुलता है। आगे: Unit 2, जहाँ program फ़ैसले लेना शुरू करता है।

Summary

Key takeaways

  • Specifiers printf/scanf को bytes पढ़ने का तरीक़ा बताते हैं: %d int, %ld long, %f float, %lf double, %c char, %s string।
  • Mismatch = garbage: printf कुछ convert नहीं करता (%d के साथ 78.5 undefined है)।
  • scanf सख़्त है (double के लिए %lf ज़रूरी); printf उदार है (%f दोनों print करता है)।
  • एक ही char पर %c बनाम %d: अक्षर बनाम ASCII number।
  • %.2f DISPLAY को 2 decimals तक छाँटता है; store की गई value वही रहती है।
  • याद रखने का hook: आकार वाली खाली जगहें, पोशाक मेहमान से मेल खानी चाहिए।

Study this properly

This page is the lesson to read. In Gri-Learn the same topic is a graded deck: the self-checks are scored and your weak topics are tracked. Free to start.

Start this topic

Already have an account? Sign in

More from Introduction to C language

Gri-Learn · syllabus-mapped B.C.A. lessons in English, Hindi and Gujarati

Type specifiers (formatting strings): %d, %ld, %f, %c, %s, %lf · Computer Programming and Programming Methodology (CPPM) · Gri-Learn