Skip to content

printf

āĻ•āĻŋ-āĻ“ā§ŸāĻžāĻ°ā§āĻĄ āϰāĻŋāĻ­āĻŋāĻļāύ āĻāĻ•ā§āϏāĻžāϰāϏāĻžāχāϜ (Keyword Revision Exercise)

  • āϏāĻŋ āĻ˛ā§āϝāĻžāĻ™ā§āĻ—ā§ā§Ÿā§‡āĻœā§‡ switch, while, for āχāĻ¤ā§āϝāĻžāĻĻāĻŋ āĻ•āĻŋāĻ“ā§ŸāĻžāĻ°ā§āĻĄāϏ (Keywords) āϏāϰāĻžāϏāϰāĻŋ āĻ­ā§āϝāĻžāϰāĻŋā§Ÿā§‡āĻŦāϞ⧇āϰ āύāĻžāĻŽ āĻšāĻŋāϏ⧇āĻŦ⧇ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āϏāĻŽā§āĻĒā§‚āĻ°ā§āĻŖ āύāĻŋāώāĻŋāĻĻā§āϧāĨ¤
  • āϤāĻŦ⧇ āϕ⧇āϏ-āϏ⧇āĻ¨ā§āϏāĻŋāϟāĻŋāĻ­āĻŋāϟāĻŋāϰ āĻ•āĻžāϰāϪ⧇ āĻāχ āĻ•āĻŋāĻ“ā§ŸāĻžāĻ°ā§āĻĄāϗ⧁āϞ⧋āϰ āϝ⧇āϕ⧋āύ⧋ āĻāĻ•āϟāĻŋ āĻŦāĻž āĻāĻ•āĻžāϧāĻŋāĻ• āĻ…āĻ•ā§āώāϰ āφāĻĒāĻžāϰāϕ⧇āϏ (Uppercase) āĻŦāĻž āĻŦ⧜ āĻšāĻžāϤ⧇āϰ āĻ…āĻ•ā§āώāϰ⧇ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ•āϰ⧇ (āϝ⧇āĻŽāύ: Switch) āϏ⧇āϟāĻŋāϕ⧇ āĻ­ā§āϝāĻžāϞāĻŋāĻĄ āĻ­ā§āϝāĻžāϰāĻŋā§Ÿā§‡āĻŦāϞ āύāĻžāĻŽ āĻšāĻŋāϏ⧇āĻŦ⧇ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āϝāĻžā§ŸāĨ¤

printf āĻĢāĻžāĻ‚āĻļāύ āĻāĻŦāĻ‚ āφāĻ°ā§āϗ⧁āĻŽā§‡āĻ¨ā§āĻŸā§‡āϰ āĻ—āĻ āύ (printf Function and Arguments Structure)

  • printf āĻĢāĻžāĻ‚āĻļāύ⧇ āφāĻ°ā§āϗ⧁āĻŽā§‡āĻ¨ā§āĻŸā§‡āϰ (Arguments) āϏāĻ‚āĻ–ā§āϝāĻž āĻ­āĻŋāĻ¨ā§āύ āĻšāϤ⧇ āĻĒāĻžāϰ⧇; āϝ⧇āĻŽāύ āĻāĻ•āϟāĻŋ āφāĻ°ā§āϗ⧁āĻŽā§‡āĻ¨ā§āϟ printf("Neso Academy");, āĻĻ⧁āϟāĻŋ āφāĻ°ā§āϗ⧁āĻŽā§‡āĻ¨ā§āϟ printf("...", var);, āĻ…āĻĨāĻŦāĻž āϤāĻŋāύāϟāĻŋ āφāĻ°ā§āϗ⧁āĻŽā§‡āĻ¨ā§āϟ āĻĨāĻžāĻ•āϤ⧇ āĻĒāĻžāϰ⧇āĨ¤
  • āĻĒā§āϰāϧāĻžāύ āύāĻŋ⧟āĻŽ (Core Rule): printf āĻĢāĻžāĻ‚āĻļāύ⧇āϰ āĻĒā§āϰāĻĨāĻŽ āφāĻ°ā§āϗ⧁āĻŽā§‡āĻ¨ā§āϟāϟāĻŋ āϏāĻ°ā§āĻŦāĻĻāĻž āĻĄāĻžāĻŦāϞ āϕ⧋āĻŸā§‡āĻļāύ āĻŦāĻž āωāĻĻā§āϧ⧃āϤāĻŋ āϚāĻŋāĻšā§āύ⧇āϰ (" ") āϭ⧇āϤāϰ⧇ āĻĨāĻžāĻ•āϤ⧇ āĻšāĻŦ⧇āĨ¤ āĻ•āĻžāϰāĻŖ āĻĒā§āϰāĻĨāĻŽ āφāĻ°ā§āϗ⧁āĻŽā§‡āĻ¨ā§āϟāϟāĻŋ āĻŽā§‚āϞāϤ āĻāĻ•āϟāĻŋ āĻ¸ā§āĻŸā§āϰāĻŋāĻ‚ āĻ•āύāĻ¸ā§āĻŸā§āϝāĻžāĻ¨ā§āϟ (String Constant), āϝāĻž āĻ¸ā§āĻ•ā§āϰāĻŋāύ⧇ āĻĒā§āϰāĻŋāĻ¨ā§āϟ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ āĻ•ā§āϝāĻžāϰ⧇āĻ•ā§āϟāĻžāϰ⧇āϰ āĻāĻ•āϟāĻŋ āϏāĻŋāĻ•ā§‹ā§Ÿā§‡āĻ¨ā§āϏ āĻŦāĻž āϏāĻŽāĻˇā§āϟāĻŋāĨ¤

āĻĒā§āϞ⧇āϏāĻšā§‹āĻ˛ā§āĻĄāĻžāϰ āĻāĻŦāĻ‚ āĻĢāϰāĻŽā§āϝāĻžāϟ āĻ¸ā§āĻĒ⧇āϏāĻŋāĻĢāĻžā§ŸāĻžāϰ (Placeholders and Format Specifiers)

  • āĻĄāĻžāĻŦāϞ āϕ⧋āĻŸā§‡āϰ āϭ⧇āϤāϰ⧇āϰ %d āϏāϰāĻžāϏāϰāĻŋ āĻ¸ā§āĻ•ā§āϰāĻŋāύ⧇ āĻĒā§āϰāĻŋāĻ¨ā§āϟ āĻšā§Ÿ āύāĻž; āĻāϟāĻŋ āĻāĻ•āϟāĻŋ āĻĒā§āϞ⧇āϏāĻšā§‹āĻ˛ā§āĻĄāĻžāϰ (Placeholder) āĻŦāĻž āĻĢāϰāĻŽā§āϝāĻžāϟ āĻ¸ā§āĻĒ⧇āϏāĻŋāĻĢāĻžā§ŸāĻžāϰ āĻšāĻŋāϏ⧇āĻŦ⧇ āĻ•āĻžāϜ āĻ•āϰ⧇āĨ¤
  • āĻāϟāĻŋ āĻ•āĻŽā§āĻĒāĻžāχāϞāĻžāϰāϕ⧇ āύāĻŋāĻ°ā§āĻĻ⧇āĻļ āĻĻā§‡ā§Ÿ āĻĄāĻžāĻŦāϞ āϕ⧋āĻŸā§‡āϰ āĻŦāĻžāχāϰ⧇ āĻĨāĻžāĻ•āĻž āĻĒāϰāĻŦāĻ°ā§āϤ⧀ āφāĻ°ā§āϗ⧁āĻŽā§‡āĻ¨ā§āϟ āĻŦāĻž āĻ­ā§āϝāĻžāϰāĻŋā§Ÿā§‡āĻŦāϞ⧇āϰ āĻŽāĻžāύ āĻĻāĻŋā§Ÿā§‡ āĻāχ āĻ¸ā§āĻĨāĻžāύāϟāĻŋāϕ⧇ āĻĒā§āϰāϤāĻŋāĻ¸ā§āĻĨāĻžāĻĒāύ (Replace) āĻ•āϰāϤ⧇āĨ¤
  • āĻāĻ–āĻžāύ⧇ d āĻ…āĻ•ā§āώāϰ⧇āϰ āĻāĻ•āϟāĻŋ āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āĻ…āĻ°ā§āĻĨ āĻ°ā§Ÿā§‡āϛ⧇; āĻāϰ āĻŽāĻžāύ⧇ āĻšāϞ⧋ āφāĻ—āϤ āĻĄā§‡āϟāĻžāϕ⧇ āĻĄā§‡āϏāĻŋāĻŽā§‡āĻžāϞ āύāĻžāĻŽā§āĻŦāĻžāϰ (Decimal Number) āĻŦāĻž āĻĒā§‚āĻ°ā§āĻŖāϏāĻ‚āĻ–ā§āϝāĻž (Integer) āĻšāĻŋāϏ⧇āĻŦ⧇ āĻĒā§āϰāĻŋāĻ¨ā§āϟ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇ (ā§Ļ āĻĨ⧇āϕ⧇ ⧝ āĻĒāĻ°ā§āϝāĻ¨ā§āϤ āϏāĻ‚āĻ–ā§āϝāĻžāϰ āϝ⧇āϕ⧋āύ⧋ āĻ•āĻŽā§āĻŦāĻŋāύ⧇āĻļāύ)āĨ¤

āφāĻ°ā§āϗ⧁āĻŽā§‡āĻ¨ā§āϟ āĻŽā§āϝāĻžāĻĒāĻŋāĻ‚ āĻāĻŦāĻ‚ āĻāϰāϰ āĻšā§āϝāĻžāĻ¨ā§āĻĄā§‡āϞāĻŋāĻ‚ (Argument Mapping and Error Handling)

  • āϕ⧋āĻĄā§‡ āĻāĻ•āĻžāϧāĻŋāĻ• āĻĒā§āϞ⧇āϏāĻšā§‹āĻ˛ā§āĻĄāĻžāϰ āĻĨāĻžāĻ•āϞ⧇ āϤāĻžāϰāĻž āĻ•ā§āϰāĻŽāĻžāύ⧁āϏāĻžāϰ⧇ āĻ­ā§āϝāĻžāϰāĻŋā§Ÿā§‡āĻŦāϞāϗ⧁āϞ⧋āϰ āϏāĻžāĻĨ⧇ āĻŽā§āϝāĻžāĻĒ āĻ•āϰ⧇āĨ¤ āϝ⧇āĻŽāύ: printf("%d %d", var1, var2); āĻ¸ā§āĻŸā§‡āϟāĻŽā§‡āĻ¨ā§āĻŸā§‡ āĻĒā§āϰāĻĨāĻŽ %d āĻŽā§āϝāĻžāĻĒ āĻ•āϰāĻŦ⧇ var1 āĻāϰ āϏāĻžāĻĨ⧇ āĻāĻŦāĻ‚ āĻĻā§āĻŦāĻŋāĻ¤ā§€ā§Ÿ %d āĻŽā§āϝāĻžāĻĒ āĻ•āϰāĻŦ⧇ var2 āĻāϰ āϏāĻžāĻĨ⧇āĨ¤ āϝāĻĻāĻŋ var1 = 3 āĻāĻŦāĻ‚ var2 = 4 āĻšā§Ÿ, āϤāĻŦ⧇ āĻŽāĻžāĻāĻ–āĻžāύ⧇ āĻ–āĻžāϞāĻŋ āϜāĻžā§ŸāĻ—āĻžāϏāĻš āφāωāϟāĻĒ⧁āϟ āφāϏāĻŦ⧇ 3 4āĨ¤

  • āĻŦāĻžāĻ§ā§āϝāϤāĻžāĻŽā§‚āϞāĻ• āύāĻŋ⧟āĻŽ (Mandatory Rule): āĻĒā§āϰ⧋āĻ—ā§āϰāĻžāĻŽā§‡ āϝāϤāϗ⧁āϞ⧋ āĻĒā§āϞ⧇āϏāĻšā§‹āĻ˛ā§āĻĄāĻžāϰ (%d) āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āĻšāĻŦ⧇, āĻ āĻŋāĻ• āϤāϤāϗ⧁āϞ⧋āχ āĻŽā§āϝāĻžāϚāĻŋāĻ‚ āĻ­ā§āϝāĻžāϰāĻŋ⧟āĻžāϞ āφāĻ°ā§āϗ⧁āĻŽā§‡āĻ¨ā§āϟ āĻĒā§āϰāĻĻāĻžāύ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇āĨ¤ āϝāĻĻāĻŋ āϕ⧋āύ⧋ āĻĒā§āϞ⧇āϏāĻšā§‹āĻ˛ā§āĻĄāĻžāϰ⧇āϰ āĻŦāĻŋāĻĒāϰ⧀āϤ⧇ āĻ­ā§āϝāĻžāϰāĻŋā§Ÿā§‡āĻŦāϞ āφāĻ°ā§āϗ⧁āĻŽā§‡āĻ¨ā§āϟ āĻ•āĻŽ āĻĨāĻžāϕ⧇, āϤāĻŦ⧇ āĻ•āĻŽā§āĻĒāĻžāχāϞāĻžāϰ āϏāϰāĻžāϏāϰāĻŋ āĻŸā§‹āϕ⧇āύ āĻāϰāϰ (Token Error) āĻĻ⧇āĻ–āĻžāĻŦ⧇: expected expression before...āĨ¤

āĻ…ā§āϝāĻžāϰāĻŋāĻĨāĻŽā§‡āϟāĻŋāĻ• āĻāĻ•ā§āϏāĻĒā§āϰ⧇āĻļāύ āĻāĻŦāĻ‚ āφāωāϟāĻĒ⧁āϟ āĻŽā§‚āĻ˛ā§āϝāĻžāϝāĻŧāύ (Arithmetic Expression and Output Evaluation)

  • āĻāĻ•āϟāĻŋ āĻ—āĻžāĻŖāĻŋāϤāĻŋāĻ• āϏāĻŽā§€āĻ•āϰāϪ⧇āϰ āωāĻĻāĻžāĻšāϰāĻŖ: ā§ĒāϟāĻŋ āĻ­ā§āϝāĻžāϰāĻŋā§Ÿā§‡āĻŦāϞ āϝāĻĨāĻžāĻ•ā§āϰāĻŽā§‡ 2, 3, 6, 3 āĻŽāĻžāύ⧇ āχāύāĻŋāĻļāĻŋ⧟āĻžāϞāĻžāχāϜ āĻ•āϰāĻž āĻšāϞ⧋ āĻāĻŦāĻ‚ āϏāĻŽā§€āĻ•āϰāĻŖāϟāĻŋ āĻšāϞ⧋ result = var1 + var2 * var3 / var4;āĨ¤
  • āϕ⧋āĻĄ āĻāĻ•ā§āϏāĻŋāĻ•āĻŋāωāĻļāύ⧇āϰ āϏāĻŽā§Ÿ āĻ­ā§āϝāĻžāϰāĻŋā§Ÿā§‡āĻŦāϞ⧇āϰ āύāĻžāĻŽāϗ⧁āϞ⧋ āĻŽā§‡āĻŽāϰāĻŋāϤ⧇ āϤāĻžāĻĻ⧇āϰ āĻāĻ•āϚ⧁⧟āĻžāϞ āĻ•āύāĻ¸ā§āĻŸā§āϝāĻžāĻ¨ā§āϟ āĻ­ā§āϝāĻžāϞ⧁ āĻĻā§āĻŦāĻžāϰāĻž āĻĒā§āϰāϤāĻŋāĻ¸ā§āĻĨāĻžāĻĒāĻŋāϤ āĻšā§Ÿ (āϝ⧇āĻŽāύ: 2 + 3 * 6 / 3)āĨ¤
  • āĻ­āĻŋāĻĄāĻŋāĻ“āϰ āĻ¸ā§āĻ•ā§āϰāĻŋāĻĒā§āϟ āĻ…āύ⧁āϝāĻžā§Ÿā§€ āĻ—āĻžāĻŖāĻŋāϤāĻŋāĻ• āĻšāĻŋāϏāĻžāĻŦ⧇āϰ āĻ•ā§āϰāĻŽāĻžāύ⧁āϏāĻžāϰ: āĻĒā§āϰāĻĨāĻŽā§‡ ⧍ āĻāĻŦāĻ‚ ā§Š āϝ⧋āĻ— āĻ•āϰ⧇ ā§Ģ, āϤāĻžāϰāĻĒāϰ ⧍ā§Ŧ āĻĻāĻŋā§Ÿā§‡ āϗ⧁āĻŖ āĻ•āϰ⧇ ā§Šā§Ļ āĻāĻŦāĻ‚ āϏāĻŦāĻļ⧇āώ⧇ ā§Š āĻĻāĻŋā§Ÿā§‡ āĻ­āĻžāĻ— āĻ•āϰ⧇ āĻšā§‚ā§œāĻžāĻ¨ā§āϤ āĻĢāϞāĻžāĻĢāϞ āĻŦāĻž result āĻāϰ āĻŽāĻžāύ āĻĻāĻžāρ⧜āĻžā§Ÿ 10āĨ¤
  • āϏāĻŽā§€āĻ•āϰāĻŖāϟāĻŋ āĻĒā§āϞ⧇āϏāĻšā§‹āĻ˛ā§āĻĄāĻžāϰ āĻĻāĻŋā§Ÿā§‡ āĻĒā§āϰāĻŋāĻ¨ā§āϟ āĻ•āϰāĻžāϰ āύāĻŋ⧟āĻŽ:
    printf("%d + %d * %d / %d", var1, var2, var3, var4);
    

    āĻāϟāĻŋ āĻ•āύāϏ⧋āϞ āωāχāĻ¨ā§āĻĄā§‹āϤ⧇ āĻĒā§āϞ⧇āϏāĻšā§‹āĻ˛ā§āĻĄāĻžāϰāϗ⧁āϞ⧋ āϏāϰāĻŋā§Ÿā§‡ āϏāϰāĻžāϏāϰāĻŋ āĻŽāĻžāύāϏāĻš āχāĻ•ā§ā§Ÿā§‡āĻļāύāϟāĻŋ āĻĒā§āϰāĻŋāĻ¨ā§āϟ āĻ•āϰāĻŦ⧇: 2 + 3 * 6 / 3āĨ¤
  • āĻšā§‚ā§œāĻžāĻ¨ā§āϤ āĻĢāϞāĻžāĻĢāϞ āĻĒā§āϰāĻŋāĻ¨ā§āϟ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ āĻĻā§āĻŦāĻŋāĻ¤ā§€ā§Ÿ printf āĻ¸ā§āĻŸā§‡āϟāĻŽā§‡āĻ¨ā§āϟ: printf("and the result of this expression is %d", result);, āϝāĻž āĻ¸ā§āĻ•ā§āϰāĻŋāύ⧇ 10 āφāωāϟāĻĒ⧁āϟ āĻĒā§āϰāĻĻāĻ°ā§āĻļāύ āĻ•āϰāĻŦ⧇ āĻāĻŦāĻ‚ āϏāĻĢāϞ āϏāĻŽāĻžāĻĒā§āϤāĻŋ āĻšāĻŋāϏ⧇āĻŦ⧇ process returned 0 āĻŽā§‡āϏ⧇āϜ āĻĻ⧇āĻ–āĻžāĻŦ⧇āĨ¤

Keyword Revision Exercise

  • Direct utilization of keywords (āĻ•āĻŋāĻ“ā§ŸāĻžāĻ°ā§āĻĄ) like switch, while, or for as variable names is strictly prohibited in C.
  • However, due to the language being case-sensitive, changing one or more letters to uppercase (āφāĻĒāĻžāϰāϕ⧇āϏ) (e.g., Switch) converts it into a valid (āĻŦ⧈āϧ) variable name configuration.

Structure of the printf Function and Arguments

  • The number of arguments (āφāĻ°ā§āϗ⧁āĻŽā§‡āĻ¨ā§āϟ) supplied to a printf function can vary: a single argument like printf("Neso Academy");, two arguments printf("...", var);, or three arguments.
  • Core Rule: The first argument of the printf function must strictly be enclosed within double quotes (" "). This is because the initial argument is always a string constant (āĻ¸ā§āĻŸā§āϰāĻŋāĻ‚ āĻ§ā§āϰ⧁āĻŦāĻ•), representing a sequence of characters to be printed directly onto the screen.

Understanding Placeholders and Format Specifiers

  • The character sequence %d inside the double quotes does not get printed literally; it functions as a placeholder (āĻĒā§āϞ⧇āϏāĻšā§‹āĻ˛ā§āĻĄāĻžāϰ) or format specifier.
  • It instructs the compiler to retrieve the subsequent sequential argument outside the quotes and replace the placeholder with that specific variable's value.
  • The letter d holds a specific architectural meaning, denoting a decimal number (āĻĻāĻļāĻŽāĻŋāĻ• āϏāĻ‚āĻ–ā§āϝāĻž), which mandates the system to print the incoming data as an integer composed of digits from 0 to 9.

Argument Mapping and Error Handling

  • When multiple placeholders are used, they map sequentially (āĻ•ā§āϰāĻŽāĻžāύ⧁āϏāĻžāϰ⧇) to the subsequent variable arguments. For instance, in printf("%d %d", var1, var2);, the first %d maps to var1 and the second maps to var2. If var1 = 3 and var2 = 4, the output rendered on the console will be 3 4 separated by a blank space.

  • Mandatory Constraint: For every single placeholder (%d) declared inside the format string, a matching variable argument must be provided. Failing to supply a corresponding variable for any placeholder causes the compiler to generate a token error: expected expression before....

Arithmetic Expression and Output Evaluation

  • Consider an arithmetic expression where 4 variables are initialized to 2, 3, 6, and 3 respectively, forming the expression: result = var1 + var2 * var3 / var4;.
  • During execution, variable names are replaced under the hood by their respective constant values (2 + 3 * 6 / 3).
  • According to the strict execution sequence detailed in the video: 2 plus 3 yields 5, multiplied by 6 yields 30, and divided by 3 results in a final computed valuation of 10 stored inside the result variable.
  • To print the structure of the equation using variables:
    printf("%d + %d * %d / %d", var1, var2, var3, var4);
    

    This replaces the specifiers to cleanly render the numbers on the screen as: 2 + 3 * 6 / 3.
  • The second statement printf("and the result of this expression is %d", result); replaces the placeholder with the calculated variable content to output 10 onto the console window, concluding with a successful process returned 0 indicator.