Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Π―Π·Ρ‹ΠΊ программирования Π‘ΠΈ. ИзданиС 3-Π΅, исправлСнноС». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 6

Автор Π‘Ρ€Π°ΠΉΠ°Π½ ΠšΠ΅Ρ€Π½ΠΈΠ³Π°Π½

#define имя подставляСмый-тСкст

Π‘ этого ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° ΠΏΡ€ΠΈ любом появлСнии ΠΈΠΌΠ΅Π½ΠΈ (Ссли Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ½ΠΎ встрСчаСтся Π½Π΅ Π² тСкстС, Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½Π½ΠΎΠΌ Π² ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ, ΠΈ Π½Π΅ являСтся Ρ‡Π°ΡΡ‚ΡŒΡŽ опрСдСлСния Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ ΠΈΠΌΠ΅Π½ΠΈ) ΠΎΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ Π½Π° ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ Π΅ΠΌΡƒ подставляСмый-тСкст. Имя ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΎΡ‚ ΠΆΠ΅ Π²ΠΈΠ΄, Ρ‡Ρ‚ΠΎ ΠΈ пСрСмСнная: ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π±ΡƒΠΊΠ² ΠΈ Ρ†ΠΈΡ„Ρ€, Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰Π°ΡΡΡ с Π±ΡƒΠΊΠ²Ρ‹. ΠŸΠΎΠ΄ΡΡ‚Π°Π²Π»ΡΠ΅ΠΌΡ‹ΠΉ-тСкст ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ любой ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ символов, срСди ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΠΎΠ³ΡƒΡ‚ Π²ΡΡ‚Ρ€Π΅Ρ‡Π°Ρ‚ΡŒΡΡ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ†ΠΈΡ„Ρ€Ρ‹.

#include β€Ήstdio.hβ€Ί


#define LOWER 0 /* ниТняя Π³Ρ€Π°Π½ΠΈΡ†Π° Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ */

#define UPPER 300 /* вСрхняя Π³Ρ€Π°Π½ΠΈΡ†Π° */

#define STEP 20 /* Ρ€Π°Π·ΠΌΠ΅Ρ€ шага */


/* ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Ρ‚Π΅ΠΌΠΏΠ΅Ρ€Π°Ρ‚ΡƒΡ€ ΠΏΠΎ Π€Π°Ρ€Π΅Π½Π³Π΅ΠΉΡ‚Ρƒ ΠΈ ЦСльсию */

main()

{

 int fahr;

 for (fahr = LOWER; fahr β€Ή= UPPER; fahr = fahr + STEP)

 printf("%3d %6.1f\n", fahr, (5.0/9.0)*(fahr-32));

}

Π’Π΅Π»ΠΈΡ‡ΠΈΠ½Ρ‹ LOWER, UPPER ΠΈ STEP - ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Π΅ константы, Π° Π½Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, поэтому для Π½ΠΈΡ… Π½Π΅Ρ‚ объявлСний. По общСпринятому соглашСнию ΠΈΠΌΠ΅Π½Π° ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Ρ… констант Π½Π°Π±ΠΈΡ€Π°ΡŽΡ‚ΡΡ Π·Π°Π³Π»Π°Π²Π½Ρ‹ΠΌΠΈ Π±ΡƒΠΊΠ²Π°ΠΌΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ΠΈ ΠΎΡ‚Π»ΠΈΡ‡Π°Π»ΠΈΡΡŒ ΠΎΡ‚ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, Π½Π°Π±ΠΈΡ€Π°Π΅ΠΌΡ‹Ρ… строчными. Π—Π°ΠΌΠ΅Ρ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π² ΠΊΠΎΠ½Ρ†Π΅ #define-строки Ρ‚ΠΎΡ‡ΠΊΠ° с запятой Π½Π΅ ставится.

1.5 Π’Π²ΠΎΠ΄-Π²Ρ‹Π²ΠΎΠ΄ символов

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ Π½Π°ΠΌΠ΅Ρ€Π΅Π½Ρ‹ Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ сСмСйство ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ ΠΏΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ тСкстов. Π’Ρ‹ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΡΠ²Π»ΡΡŽΡ‚ΡΡ просто Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½Ρ‹ΠΌΠΈ вСрсиями обсуТдаСмых здСсь ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠΎΠ².

Бтандартная Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΡ€ΠΎΡΡ‚ΡƒΡŽ модСль Π²Π²ΠΎΠ΄Π°-Π²Ρ‹Π²ΠΎΠ΄Π°. ВСкстовый Π²Π²ΠΎΠ΄-Π²Ρ‹Π²ΠΎΠ΄ Π²Π½Π΅ зависимости ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, ΠΎΡ‚ΠΊΡƒΠ΄Π° ΠΎΠ½ исходит ΠΈΠ»ΠΈ ΠΊΡƒΠ΄Π° направляСтся, ΠΈΠΌΠ΅Π΅Ρ‚ Π΄Π΅Π»ΠΎ с ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ символов. ВСкстовый ΠΏΠΎΡ‚ΠΎΠΊ - это ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ символов, разбитая Π½Π° строки, каТдая ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… содСрТит Π½ΡƒΠ»ΡŒ ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ символов ΠΈ Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ символом Π½ΠΎΠ²ΠΎΠΉ строки. ΠžΠ±ΡΠ·Π°Π½Π½ΠΎΡΡ‚ΡŒ ΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ Π·Π° Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ любой ΠΏΠΎΡ‚ΠΎΠΊ Π²Π²ΠΎΠ΄Π°-Π²Ρ‹Π²ΠΎΠ΄Π° ΠΎΡ‚Π²Π΅Ρ‡Π°Π» этой ΠΌΠΎΠ΄Π΅Π»ΠΈ, Π²ΠΎΠ·Π»ΠΎΠΆΠ΅Π½Π° Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ: программист, ΠΏΠΎΠ»ΡŒΠ·ΡƒΡΡΡŒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ, Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π·Π°Π±ΠΎΡ‚ΠΈΡ‚ΡŒΡΡ ΠΎ Ρ‚ΠΎΠΌ, Π² ΠΊΠ°ΠΊΠΎΠΌ Π²ΠΈΠ΄Π΅ строки ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ΡΡ Π²Π½Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

Бтандартная Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ нСсколько Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ для чтСния ΠΈ записи ΠΎΠ΄Π½ΠΎΠ³ΠΎ символа. ΠŸΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠΈΠ΅ ΠΈΠ· Π½ΠΈΡ… - getchar ΠΈ putchar. Π—Π° ΠΎΠ΄Π½ΠΎ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ getchar считываСтся ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ символ Π²Π²ΠΎΠ΄Π° ΠΈΠ· тСкстового ΠΏΠΎΡ‚ΠΎΠΊΠ°, ΠΈ этот символ выдаСтся Π² качСствС Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°. Π’Π°ΠΊ, послС выполнСния

c = getchar();

пСрСмСнная c содСрТит ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠΉ символ Π²Π²ΠΎΠ΄Π°. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ символы ΠΏΠΎΡΡ‚ΡƒΠΏΠ°ΡŽΡ‚ с ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹. Π’Π²ΠΎΠ΄ ΠΈΠ· Ρ„Π°ΠΉΠ»ΠΎΠ² рассматриваСтся Π² Π³Π»Π°Π²Π΅ 7.

ΠžΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ putchar ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ΠΏΠ΅Ρ‡Π°Ρ‚ΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ символа. Π’Π°ΠΊ,

putchar(c);

Π½Π°ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π΅Ρ‚ содСрТимоС Ρ†Π΅Π»ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ c Π² Π²ΠΈΠ΄Π΅ символа (ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π½Π° экранС). Π’Ρ‹Π·ΠΎΠ²Ρ‹ putchar ΠΈ printf ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅ΠΆΠ°Ρ‚ΡŒΡΡ. Π’Ρ‹Π²ΠΎΠ΄ Π±ΡƒΠ΄Π΅Ρ‚ Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² Ρ‚ΠΎΠΌ ΠΆΠ΅ порядкС, Ρ‡Ρ‚ΠΎ ΠΈ обращСния ΠΊ этим функциям.

1.5.1 ΠšΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»Π°

ΠŸΡ€ΠΈ Π½Π°Π»ΠΈΡ‡ΠΈΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ getchar ΠΈ putchar, Π½ΠΈΡ‡Π΅Π³ΠΎ большС Π½Π΅ зная ΠΎ Π²Π²ΠΎΠ΄Π΅-Π²Ρ‹Π²ΠΎΠ΄Π΅, ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΡƒΠ΄ΠΈΠ²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ. ΠŸΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ - это ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, ΠΊΠΎΠΏΠΈΡ€ΡƒΡŽΡ‰Π°Ρ ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ символу с Π²Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ° Π² Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠΎΡ‚ΠΎΠΊ:

Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ символа

while (символ Π½Π΅ являСтся ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠΎΠΌ ΠΊΠΎΠ½Ρ†Π° Ρ„Π°ΠΉΠ»Π°)

Π²Ρ‹Π²ΠΎΠ΄ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π½Π½ΠΎΠ³ΠΎ символа

Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ символа

ΠžΡ„ΠΎΡ€ΠΌΠ»ΡΡ Π΅Π΅ Π² Π²ΠΈΠ΄Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½ΠΈ Π‘ΠΈ, ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ

#include β€Ήstdio.hβ€Ί


/* ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π²Π²ΠΎΠ΄Π° Π½Π° Π²Ρ‹Π²ΠΎΠ΄, 1-я вСрсия */

main()

{

 int c;

 c = getchar();

 while (c != EOF) {

  putchar(c);

  c = getchar();

 }

}

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ != ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ "Π½Π΅ Ρ€Π°Π²Π½ΠΎ".

ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ символ, Π²Π²ΠΎΠ΄ΠΈΠΌΡ‹ΠΉ с ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹ ΠΈΠ»ΠΈ ΠΏΠΎΡΠ²Π»ΡΡŽΡ‰ΠΈΠΉΡΡ Π½Π° экранС, ΠΊΠ°ΠΊ ΠΈ любой Π΄Ρ€ΡƒΠ³ΠΎΠΉ символ Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΌΠ°ΡˆΠΈΠ½Ρ‹, кодируСтся ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠ΅ΠΉ Π±ΠΈΡ‚ΠΎΠ². Π’ΠΈΠΏ char ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для хранСния ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…, ΠΎΠ΄Π½Π°ΠΊΠΎ для этого Ρ‚Π°ΠΊΠΆΠ΅ годится ΠΈ любой Ρ†Π΅Π»Ρ‹ΠΉ Ρ‚ΠΈΠΏ. ΠœΡ‹ ΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡΡ Ρ‚ΠΈΠΏΠΎΠΌ int ΠΈ Π΄Π΅Π»Π°Π΅ΠΌ это ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΉ Π²Π°ΠΆΠ½ΠΎΠΉ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅, которая Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Ρ€Π°Π·ΡŠΡΡΠ½Π΅Π½ΠΈΠΉ.

БущСствуСт ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°: ΠΊΠ°ΠΊ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΡ‚ΡŒ ΠΊΠΎΠ½Π΅Ρ† Π²Π²ΠΎΠ΄Π° ΠΎΡ‚ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ… Ρ‡ΠΈΡ‚Π°Π΅ΠΌΡ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…. РСшСниС Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ функция getchar ΠΏΠΎ исчСрпании Π²Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ° Π²Ρ‹Π΄Π°Π²Π°Π»Π° Π² качСствС Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° Ρ‚Π°ΠΊΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ нСльзя Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΡΠΏΡƒΡ‚Π°Ρ‚ΡŒ Π½ΠΈ с ΠΎΠ΄Π½ΠΈΠΌ Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹ΠΌ символом. Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π΅ΡΡ‚ΡŒ EOF (Π°Π±Π±Ρ€Π΅Π²ΠΈΠ°Ρ‚ΡƒΡ€Π° ΠΎΡ‚ end of file - ΠΊΠΎΠ½Π΅Ρ† Ρ„Π°ΠΉΠ»Π°). ΠœΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ c Ρ‚Π°ΠΊΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΅Π³ΠΎ "Ρ…Π²Π°Ρ‚ΠΈΠ»ΠΎ" для прСдставлСния всСх Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ², Π²Ρ‹Π΄Π°Π²Π°Π΅ΠΌΡ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ getchar. Нам Π½Π΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ Ρ‚ΠΈΠΏ char, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ c Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ достаточно "Π΅ΠΌΠΊΠΎΠΉ", Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠΌΠΈΠΌΠΎ любого значСния Ρ‚ΠΈΠΏΠ° char Π±Ρ‹Ρ‚ΡŒ Π² состоянии Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΈ EOF. Π’ΠΎΡ‚ ΠΏΠΎΡ‡Π΅ΠΌΡƒ ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ int, Π° Π½Π΅ char.

EOF - цСлая константа, опрСдСлСнная Π² β€Ήstdio.hβ€Ί. КакоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π΅Ρ‚ эта константа - Π½Π΅Π²Π°ΠΆΠ½ΠΎ, лишь Π±Ρ‹ ΠΎΠ½ΠΎ ΠΎΡ‚Π»ΠΈΡ‡Π°Π»ΠΎΡΡŒ ΠΎΡ‚ любого ΠΈΠ· Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Ρ‚ΠΈΠΏΠ° char. ИспользованиС ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΠΎΠΉ константы с ΡƒΠ½ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°Π²ΠΈΡΠ΅Ρ‚ΡŒ ΠΎΡ‚ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ числового значСния, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… Π‘ΠΈ-систСмах Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠ½Ρ‹ΠΌ.

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ копирования ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ сТато. Π’ Π‘ΠΈ любоС присваиваниС, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€

c = getchar()

трактуСтся ΠΊΠ°ΠΊ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ со Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ, Ρ€Π°Π²Π½Ρ‹ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ Π»Π΅Π²ΠΎΠΉ части послС присваивания. Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ присваиваниС ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΡΡ‚Ρ€Π΅Ρ‡Π°Ρ‚ΡŒΡΡ Π²Π½ΡƒΡ‚Ρ€ΠΈ Π±ΠΎΠ»Π΅Π΅ слоТного выраТСния. Если присваиваниС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ c Ρ€Π°ΡΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚ΡŒ Π² ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ΅ условия Ρ†ΠΈΠΊΠ»Π° while, Ρ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ копирования ΠΌΠΎΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ Π²ΠΈΠ΄Π΅:

#include β€Ήstdio.hβ€Ί

/* ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π²Π²ΠΎΠ΄Π° Π½Π° Π²Ρ‹Π²ΠΎΠ΄; 2-я вСрсия */

main()

{

 int c;


 while ((с = getchar()) != EOF)

  putchar(c);

}

Π¦ΠΈΠΊΠ» while, пСрСсылая Π² c ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠ΅ ΠΎΡ‚ getchar Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, сразу ΠΆΠ΅ провСряСт: Π½Π΅ являСтся Π»ΠΈ ΠΎΠ½ΠΎ "ΠΊΠΎΠ½Ρ†ΠΎΠΌ Ρ„Π°ΠΉΠ»Π°". Если это Π½Π΅ Ρ‚Π°ΠΊ, выполняСтся Ρ‚Π΅Π»ΠΎ Ρ†ΠΈΠΊΠ»Π° while ΠΈ пСчатаСтся символ. По ΠΎΠΊΠΎΠ½Ρ‡Π°Π½ΠΈΠΈ Π²Π²ΠΎΠ΄Π° Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ Ρ€Π°Π±ΠΎΡ‚Π° Ρ†ΠΈΠΊΠ»Π° while, Π° Ρ‚Π΅ΠΌ самым ΠΈ main.

Π’ Π΄Π°Π½Π½ΠΎΠΉ вСрсии Π²Π²ΠΎΠ΄ "Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½". - Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ имССтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΎ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ getchar. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ ΠΎΠ½Π° Π±ΠΎΠ»Π΅Π΅ ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚Π½Π° ΠΈ Π»Π΅Π³Ρ‡Π΅ воспринимаСтся ΠΏΡ€ΠΈ Ρ‡Ρ‚Π΅Π½ΠΈΠΈ. Π’Π°ΠΌ часто придСтся ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°Ρ‚ΡŒΡΡ с Ρ‚Π°ΠΊΠΎΠΉ Ρ„ΠΎΡ€ΠΌΠΎΠΉ записи, Π³Π΄Π΅ присваиваниС дСлаСтся вмСстС с ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΎΠΉ. (Π§Ρ€Π΅Π·ΠΌΠ΅Ρ€Π½ΠΎΠ΅ ΡƒΠ²Π»Π΅Ρ‡Π΅Π½ΠΈΠ΅ Сю, ΠΎΠ΄Π½Π°ΠΊΠΎ, ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°ΠΏΡƒΡ‚Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, поэтому ΠΌΡ‹ постараСмся ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΠΎΠΉ Ρ€Π°Π·ΡƒΠΌΠ½ΠΎ.)

Π‘ΠΊΠΎΠ±ΠΊΠΈ Π²Π½ΡƒΡ‚Ρ€ΠΈ условия, Π²ΠΎΠΊΡ€ΡƒΠ³ присваивания, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹. ΠŸΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ != Π²Ρ‹ΡˆΠ΅, Ρ‡Π΅ΠΌ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ =, ΠΈΠ· Ρ‡Π΅Π³ΠΎ слСдуСт, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ отсутствии скобок ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°!= Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Π΄ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ присваивания =. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, запись

c = getchar() != EOF

эквивалСнтна записи

c = (getchar() != EOF)

А это совсСм Π½Π΅ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ: ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ c Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°Ρ‚ΡŒΡΡ 0 ΠΈΠ»ΠΈ 1 Π² зависимости ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, встрСтит ΠΈΠ»ΠΈ Π½Π΅ встрСтит getchar ΠΏΡ€ΠΈΠ·Π½Π°ΠΊ ΠΊΠΎΠ½Ρ†Π° Ρ„Π°ΠΉΠ»Π°. (Π‘ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ ΠΎΠ± этом см. Π² Π³Π»Π°Π²Π΅ 2.)

Π£ΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ 1.6. Π£Π±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ getchar()!= EOF ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 0 ΠΈΠ»ΠΈ 1.

Π£ΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ 1.7. ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, ΠΏΠ΅Ρ‡Π°Ρ‚Π°ΡŽΡ‰ΡƒΡŽ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ EOF.

1.5.2 ΠŸΠΎΠ΄ΡΡ‡Π΅Ρ‚ символов

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° занимаСтся подсчСтом символов; ΠΎΠ½Π° ΠΈΠΌΠ΅Π΅Ρ‚ ΠΌΠ½ΠΎΠ³ΠΎ сходных Ρ‡Π΅Ρ€Ρ‚ с ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ копирования.

#include β€Ήstdio.hβ€Ί


/* подсчСт Π²Π²ΠΎΠ΄ΠΈΠΌΡ‹Ρ… символов; 1-я вСрсия */

main()

{

 long nc;

 nc = 0;


 while (getchar() != EOF)

  ++nc;

 printf("%ld\n", nc);

}

Π˜Π½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡ

++nc;

прСдставляСт Π½ΠΎΠ²Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ ++, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ. ВмСсто этого ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ nc=nc+1, Π½ΠΎ ++nc Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΡ€ΠΎΡ‡Π΅, Π° часто ΠΈ эффСктивнСС. БущСствуСт Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ --, ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‰ΠΈΠΉ ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ. ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ ++ ΠΈ -- ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΊΠ°ΠΊ прСфиксными (++nc), Ρ‚Π°ΠΊ ΠΈ постфиксными (nc++). Как Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² Π³Π»Π°Π²Π΅ 2, эти Π΄Π²Π΅ Ρ„ΠΎΡ€ΠΌΡ‹ Π² выраТСниях ΠΈΠΌΠ΅ΡŽΡ‚ Ρ€Π°Π·Π½Ρ‹Π΅ значСния, Π½ΠΎ ΠΈ ++nc, ΠΈ nc++ Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ ΠΊ nc Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ. Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС ΠΌΡ‹ ΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΈΠ»ΠΈΡΡŒ Π½Π° прСфиксной записи.

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° подсчСта символов Π½Π°ΠΊΠ°ΠΏΠ»ΠΈΠ²Π°Π΅Ρ‚ сумму Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Ρ‚ΠΈΠΏΠ° long. Π¦Π΅Π»Ρ‹Π΅ Ρ‚ΠΈΠΏΠ° long ΠΈΠΌΠ΅ΡŽΡ‚ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ 32 Π±ΠΈΡ‚ΠΎΠ². Π₯отя Π½Π° Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΠ°ΡˆΠΈΠ½Π°Ρ… Ρ‚ΠΈΠΏΡ‹ int ΠΈ long ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€, ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚, ΠΎΠ΄Π½Π°ΠΊΠΎ, ΠΌΠ°ΡˆΠΈΠ½Ρ‹, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… int Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ 16 Π±ΠΈΡ‚ с максимально Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ 32767, Π° это - ΡΡ€Π°Π²Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ малСнькоС число, ΠΈ счСтчик Ρ‚ΠΈΠΏΠ° int ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒΡΡ. БпСцификация %ld Π² printf ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΈΠΏ long.