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

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

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

/* minprintf: ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ printf с ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ числом Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² */

void minprintf(char *fmt, …)

{

 va_list ap; /* ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠΉ бСзымянный Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ */

 char *p, *sval;

 int ival;

 double dval;


 va_start(ap, fmt); /* устанавливаСт ap Π½Π° 1-ΠΉ бСзымянный Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ */

 for (p=fmt; *p; p++) {

  if (*p !='%') {

   putchar(*p);

   continue;

  }

  switch (*++p) {

  case 'd':

   ival = va_arg(ap, int);

   printf ("%d", ival);

   break;

  case 'f':

   dval = va_arg(ap, double);

   printf("%f", dval);

   break;

  case 's':

    for (sval = va_arg(ap, char *); *sval; sval++)

     putchar(*sval);

    break;

  default:

   putchar(*p);

   break;

  }

 }

 va_end(ap); /* очистка, ΠΊΠΎΠ³Π΄Π° всС сдСлано */

}

Π£ΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ 7.3. Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ minprintf Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ возмоТностями printf.

7.4 Π€ΠΎΡ€ΠΌΠ°Ρ‚Π½Ρ‹ΠΉ Π²Π²ΠΎΠ΄ (scanf)

Ѐункция scanf, ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‰Π°Ρ Π²Π²ΠΎΠ΄, являСтся Π°Π½Π°Π»ΠΎΠ³ΠΎΠΌ printf; ΠΎΠ½Π° выполняСт ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΈΠ· ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π²ΡˆΠΈΡ…ΡΡ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠΉ, Π½ΠΎ Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½ΠΎΠΌ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΈ. Π•Π΅ объявлСниС ΠΈΠΌΠ΅Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π²ΠΈΠ΄:

int scanf(char *format, …)

Ѐункция scanf Ρ‡ΠΈΡ‚Π°Π΅Ρ‚ символы ΠΈΠ· стандартного Π²Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ°, ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΈΡ… согласно спСцификациям строки format ΠΈ рассылаСт Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ Π² свои ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹. АргумСнт format ΠΌΡ‹ опишСм ΠΏΠΎΠ·ΠΆΠ΅; Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΌ, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚, Π³Π΄Π΅ Π±ΡƒΠ΄ΡƒΡ‚ Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°Ρ‚ΡŒΡΡ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅. Как ΠΈ для printf, Π² этом ΠΏΠ°Ρ€Π°Π³Ρ€Π°Ρ„Π΅ даСтся сводка Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Ρ…, Π½ΠΎ ΠΎΡ‚Π½ΡŽΠ΄ΡŒ Π½Π΅ всСх возмоТностСй Π΄Π°Π½Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

Ѐункция scanf ΠΏΡ€Π΅ΠΊΡ€Π°Ρ‰Π°Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ, ΠΊΠΎΠ³Π΄Π° оказываСтся, Ρ‡Ρ‚ΠΎ исчСрпался Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ ΠΈΠ»ΠΈ вводимая Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Π° Π½Π΅ соотвСтствуСт ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰Π΅ΠΉ спСцификации. Π’ качСствС Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° scanf Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ количСство ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ Π²Π²Π΅Π΄Π΅Π½Π½Ρ‹Ρ… элСмСнтов Π΄Π°Π½Π½Ρ‹Ρ…. По исчСрпании Ρ„Π°ΠΉΠ»Π° ΠΎΠ½Π° Π²Ρ‹Π΄Π°Π΅Ρ‚ EOF. БущСствСнно Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ EOF Π½Π΅ Ρ€Π°Π²Π½ΠΎ Π½ΡƒΠ»ΡŽ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π½ΡƒΠ»ΡŒ scanf Π²Ρ‹Π΄Π°Π΅Ρ‚, ΠΊΠΎΠ³Π΄Π° Π²Π²ΠΎΠ΄ΠΈΠΌΡ‹ΠΉ символ Π½Π΅ соотвСтствуСт ΠΏΠ΅Ρ€Π²ΠΎΠΉ спСцификации Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π½ΠΎΠΉ строки. КаТдоС ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠ΅ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ scanf ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ‚ Π²Π²ΠΎΠ΄ символа, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ сразу Π·Π° послСдним ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹ΠΌ.

БущСствуСт Ρ‚Π°ΠΊΠΆΠ΅ функция sscanf, которая Ρ‡ΠΈΡ‚Π°Π΅Ρ‚ ΠΈΠ· строки (Π° Π½Π΅ ΠΈΠ· стандартного Π²Π²ΠΎΠ΄Π°).

int sscanf(char *string, char *format, arg1, arg2,…)

Ѐункция sscanf просматриваСт строку string согласно Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Ρƒ format ΠΈ рассылаСт ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Π΅ значСния Π² arg1, arg2 ΠΈ Ρ‚. Π΄. ПослСдниС Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ указатСлями.

Π€ΠΎΡ€ΠΌΠ°Ρ‚ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ содСрТит спСцификации, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для управлСния прСобразованиями Π²Π²ΠΎΠ΄Π°. Π’ Π½Π΅Π³ΠΎ ΠΌΠΎΠ³ΡƒΡ‚ Π²Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ элСмСнты:

β€’ ΠŸΡ€ΠΎΠ±Π΅Π»Ρ‹ ΠΈΠ»ΠΈ табуляции, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΡƒΡŽΡ‚ΡΡ.

β€’ ΠžΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ символы (ΠΈΡΠΊΠ»ΡŽΡ‡Π°Ρ %), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅, ΠΊΠ°ΠΊ оТидаСтся, совпадут с ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½Ρ‹ΠΌΠΈ символами, ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ ΠΎΡ‚ символов-Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»Π΅ΠΉ Π²Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ°.

β€’ Π‘ΠΏΠ΅Ρ†ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ прСобразования, каТдая ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… начинаСтся со Π·Π½Π°ΠΊΠ° % ΠΈ Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ символом-спСцификатором Ρ‚ΠΈΠΏΠ° прСобразования. Π’ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΊΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ этими двумя символами Π² любой спСцификации ΠΌΠΎΠ³ΡƒΡ‚ Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°Ρ‚ΡŒΡΡ, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ Π² Ρ‚ΠΎΠΌ порядкС, ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ здСсь ΡƒΠΊΠ°Π·Π°Π½Ρ‹: Π·Π½Π°ΠΊ * (ΠΏΡ€ΠΈΠ·Π½Π°ΠΊ подавлСния присваивания); число, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰Π΅Π΅ ΡˆΠΈΡ€ΠΈΠ½Ρƒ поля; Π±ΡƒΠΊΠ²Π° h, l ΠΈΠ»ΠΈ L, ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰Π°Ρ Π½Π° Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌΠΎΠ³ΠΎ значСния; ΠΈ символ прСобразования (o, d, x).

БпСцификация прСобразования управляСт ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ Π²Π²ΠΎΠ΄ΠΈΠΌΠΎΠ³ΠΎ поля. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ помСщаСтся Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚. Однако Ссли Π² спСцификации прСобразования присутствуСт *, Ρ‚ΠΎ ΠΏΠΎΠ»Π΅ Π²Π²ΠΎΠ΄Π° пропускаСтся ΠΈ Π½ΠΈΠΊΠ°ΠΊΠΎΠ΅ присваиваниС Π½Π΅ выполняСтся. ПолС Π²Π²ΠΎΠ΄Π° опрСдСляСтся ΠΊΠ°ΠΊ строка Π±Π΅Π· символов-Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»Π΅ΠΉ; ΠΎΠ½ΠΎ простираСтся Π΄ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ символа-раздСлитСля ΠΈΠ»ΠΈ ΠΆΠ΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΎ ΡˆΠΈΡ€ΠΈΠ½ΠΎΠΉ поля, Ссли ΠΎΠ½Π° Π·Π°Π΄Π°Π½Π°. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ символ Π½ΠΎΠ²ΠΎΠΉ строки относится ΠΊ символам-раздСлитСлям, Ρ‚ΠΎ sscanf ΠΏΡ€ΠΈ Ρ‡Ρ‚Π΅Π½ΠΈΠΈ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ с ΠΎΠ΄Π½ΠΎΠΉ строки Π½Π° Π΄Ρ€ΡƒΠ³ΡƒΡŽ. (Π‘ΠΈΠΌΠ²ΠΎΠ»Π°ΠΌΠΈ-раздСлитСлями ΡΠ²Π»ΡΡŽΡ‚ΡΡ символы ΠΏΡ€ΠΎΠ±Π΅Π»Π°, табуляции, Π½ΠΎΠ²ΠΎΠΉ строки, Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π° ΠΊΠ°Ρ€Π΅Ρ‚ΠΊΠΈ, Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠΉ табуляции ΠΈ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° страницы.)

Π‘ΠΈΠΌΠ²ΠΎΠ»-спСцификатор ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, ΠΊΠ°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ слСдуСт ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠ΅ ΠΏΠΎΠ»Π΅ Π²Π²ΠΎΠ΄Π°. Π‘ΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΌ, ΠΊΠ°ΠΊ Ρ‚ΠΎΠ³ΠΎ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΏΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ, принятый Π² Π‘ΠΈ. Π‘ΠΈΠΌΠ²ΠΎΠ»Ρ‹-спСцификаторы ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ 7.2.

ΠŸΠ΅Ρ€Π΅Π΄ символами-спСцификаторами d, l, o, u ΠΈ x ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡ‚ΠΎΡΡ‚ΡŒ Π±ΡƒΠΊΠ²Π° h, ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰Π°Ρ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ‚ΠΈΠΏ short * (Π° Π½Π΅ int *),ΠΈΠ»ΠΈ l (латинская ell), ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰Π°Ρ Π½Π° Ρ‚ΠΈΠΏ long *. Аналогично, ΠΏΠ΅Ρ€Π΅Π΄ символами-спСцификаторами e, f ΠΈ g ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡ‚ΠΎΡΡ‚ΡŒ Π±ΡƒΠΊΠ²Π° l, ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰Π°Ρ, Ρ‡Ρ‚ΠΎ Ρ‚ΠΈΠΏ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° - double * (Π° Π½Π΅ float *).

Π’Π°Π±Π»ΠΈΡ†Π° 7.2 ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ прСобразования scanf

Π‘ΠΈΠΌΠ²ΠΎΠ» Π’Π²ΠΎΠ΄ΠΈΠΌΡ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅; Ρ‚ΠΈΠΏ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° d дСсятичноС Ρ†Π΅Π»ΠΎΠ΅: int * i Ρ†Π΅Π»ΠΎΠ΅: int *. Π¦Π΅Π»ΠΎΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²ΠΎΡΡŒΠΌΠ΅Ρ€ΠΈΡ‡Π½Ρ‹ΠΌ (с 0 слСва) ΠΈΠ»ΠΈ ΡˆΠ΅ΡΡ‚Π½Π°Π΄Ρ†Π°Ρ‚Π΅Ρ€ΠΈΡ‡Π½Ρ‹ΠΌ (с 0x ΠΈΠ»ΠΈ 0X слСва) o Π²ΠΎΡΡŒΠΌΠ΅Ρ€ΠΈΡ‡Π½ΠΎΠ΅ Ρ†Π΅Π»ΠΎΠ΅ (с Π½ΡƒΠ»Π΅ΠΌ слСва ΠΈΠ»ΠΈ Π±Π΅Π· Π½Π΅Π³ΠΎ); int * u Π±Π΅Π·Π·Π½Π°ΠΊΠΎΠ²ΠΎΠ΅ дСсятичноС Ρ†Π΅Π»ΠΎΠ΅; unsigned int * x ΡˆΠ΅ΡΡ‚Π½Π°Π΄Ρ†Π°Ρ‚Π΅Ρ€ΠΈΡ‡Π½ΠΎΠ΅ Ρ†Π΅Π»ΠΎΠ΅ (с 0x ΠΈΠ»ΠΈ 0X слСва ΠΈΠ»ΠΈ Π±Π΅Π· Π½ΠΈΡ…); int * c символы; char *. Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ символы Π²Π²ΠΎΠ΄Π° (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΎΠ΄ΠΈΠ½) Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°ΡŽΡ‚ΡΡ Π² ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΌ мСстС. ΠžΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ пропуск символов- Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»Π΅ΠΉ подавляСтся; Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΡ‡Π΅ΡΡ‚ΡŒ ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠΉ символ, ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹ΠΉ ΠΎΡ‚ символа-раздСлитСля, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ %1s s Π‘Ρ‚Ρ€ΠΎΠΊΠ° символов(Π±Π΅Π· ΠΎΠ±Ρ€Π°ΠΌΠ»ΡΡŽΡ‰ΠΈΡ… ΠΊΠ°Π²Ρ‹Ρ‡Π΅ΠΊ); char *, ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰Π°Ρ Π½Π° массив символов, достаточный для строки ΠΈ Π·Π°Π²Π΅Ρ€ΡˆΠ°ΡŽΡ‰Π΅Π³ΠΎ символа '\0', ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ e, f, g число с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, со Π·Π½Π°ΠΊΠΎΠΌ; ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ присутствиС Π»ΠΈΠ±ΠΎ дСсятичной Ρ‚ΠΎΡ‡ΠΊΠΈ, Π»ΠΈΠ±ΠΎ ΡΠΊΡΠΏΠΎΠ½Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ части, Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΈ ΠΎΠ±Π΅ΠΈΡ… вмСстС; float * % сам Π·Π½Π°ΠΊ %, Π½ΠΈΠΊΠ°ΠΊΠΎΠ΅ присваиваниС Π½Π΅ выполняСтся

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€, обратимся ΠΊ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€Π° ΠΈΠ· Π³Π»Π°Π²Ρ‹ 4, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΡƒΠ΅ΠΌ Π²Π²ΠΎΠ΄ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ scanf:

#include β€Ήstdio.hβ€Ί


main() /* ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°-ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€ */ {

 double sum, v;


 sum = 0;

 while (scanf ("%lf", &v) == 1)

  printf("\t%.2f\n", sum += v);

 return 0;

}

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ строки Π²Π²ΠΎΠ΄Π°, содСрТащиС Π΄Π°Π½Π½Ρ‹Π΅ Π²ΠΈΠ΄Π°

25 Π΄Π΅ΠΊ 1988

ΠžΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ scanf выглядит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

int day, year; /* дСнь, год */

char monthname[20]; /* Π½Π°Π·Π²Π°Π½ΠΈΠ΅ мСсяца */


scanf ("%d %s %d", &day, monthname, &year);

Π—Π½Π°ΠΊ & ΠΏΠ΅Ρ€Π΅Π΄ monthname Π½Π΅ Π½ΡƒΠΆΠ΅Π½, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ имя массива Π΅ΡΡ‚ΡŒ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ.

Π’ строкС Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ символы, Π½Π΅ ΡƒΡ‡Π°ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Π½ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· спСцификаций; это Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ эти символы Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠΎΡΠ²ΠΈΡ‚ΡŒΡΡ Π½Π° Π²Π²ΠΎΠ΄Π΅. Π’Π°ΠΊ, ΠΌΡ‹ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π΄Π°Ρ‚Ρ‹ Π²ΠΈΠ΄Π° mm/dd/yy с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ обращСния ΠΊ scanf:

int day, month, year; /* дСнь, мСсяц, Π³ΠΎΠ΄ */

scanf("%d/%d/%d", &day, &month, &year);

Π’ своСм Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ функция scanf ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΏΡ€ΠΎΠ±Π΅Π»Ρ‹ ΠΈ табуляции. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΏΡ€ΠΈ поискС ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΏΠΎΡ€Ρ†ΠΈΠΈ Π²Π²ΠΎΠ΄Π° ΠΎΠ½Π° пропускаСт Π²ΠΎ Π²Ρ…ΠΎΠ΄Π½ΠΎΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠ΅ всС символы- Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΠΈ (ΠΏΡ€ΠΎΠ±Π΅Π»Ρ‹, табуляции, Π½ΠΎΠ²Ρ‹Π΅ строки ΠΈ Ρ‚.Π΄.). Π’ΠΎΡΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Π²Ρ…ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠΎΡ‚ΠΎΠΊ, Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠΉ фиксированного Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°, часто оказываСтся ΡƒΠ΄ΠΎΠ±Π½Π΅Π΅, Ссли Π²Π²ΠΎΠ΄ΠΈΡ‚ΡŒ всю строку Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ ΠΈ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ случая ΠΏΠΎΠ΄Π±ΠΈΡ€Π°Ρ‚ΡŒ подходящий Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ sscanf. ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ строки с Π΄Π°Ρ‚Π°ΠΌΠΈ, записанными Π² любой ΠΈΠ· ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹Ρ… Π²Ρ‹ΡˆΠ΅ Ρ„ΠΎΡ€ΠΌ. Π’ΠΎΠ³Π΄Π° ΠΌΡ‹ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ:

while (getline(line, sizeof(line)) β€Ί 0) {

 if (sscanf(line, "%d %s %d", &day, monthname, &year) == 3)

  printf("Π²epΠ½ΠΎ: %s\r", line); /* Π² Π²ΠΈΠ΄Π΅ 25 Π΄Π΅ΠΊ 1968 */

 else if (sscanf(line, "%d/%d/%d", &month, &day, &year) == 3)

  printf("Π²epΠ½ΠΎ: %s\n", line); /* Π² Π²ΠΈΠ΄Π΅ mm/dd/yy */