Мы уже видели применение функции printf()
в примерах ранее:
#include <stdio.h> int main (int argc, char **argv) { printf("Hello, world\n"); printf("Argc: %d\n", argc); int i; for (i = 0; i < argc; i++) { printf("Argv[%d]: %s\n", i, argv[i]); } return 0; }
В строке printf("Argv[%d]: %s\n", i, argv[i])
– printf()
выводит на экран текст (“Argv” и “:“) и подставляет данные из переданных аргументов (i
и argv[i]
) в т.н. спецификаторы формата (%d
и %s
) (см. тут>>>).
Давайте напишем ещё одну программу:
#include <stdio.h> int main (int argc, char **argv) { printf("Hello, World.\n"); puts("Puts, World\n"); printf("First is number %d and second is string %s.\n", 20, "STRING TEXT"); }
Тут:
- строка
printf("Hello, World.\n")
– просто выведет на экран Hello, World и завершит её переносом на новую строку. - строка
puts("Puts, World\n")
– демонстрирует ещё одну функцию –puts()
– которую можно использовать для печати простых строк, без подстановки данных. - в строке
printf("First is number %d and second is string %s.\n", 20, "STRING TEXT")
– мы и применяем подстановку, используя два спецификатора формата –%d
(decimal) для десятичной цифры (20), и%s
(string) – для строки (“STRING TEXT“).
Таким образом – printf()
подставляет данные в спецификаторы по очереди:
%d
– первый аргумент дляprintf()
равен 20, будет подставлен сюда%s
– второй агрумент дляprintf()
равен “STRING TEXT“, будет использован тут.
Скомпилируем и запустим программу:
[simterm]
$ gcc printfc.c -o printfc $ ./printfc Hello, World. Puts, World First is number 20 and second is string STRING TEXT.
[/simterm]
Учтите – что компилятор не будет выполнять проверку соответствия типа спецификатора (decimal, char, string etc) и типов агрументов:
#include <stdio.h> int main (int argc, char **argv) { ... printf("First is number %d and second is string %s.\n", 20, "STRING TEXT"); printf("First is number %d and second is string %s.\n", "STRING TEXT", 20); }
Результатом подстановки “STRING TEXT” в спецификатор типа %d
, а числа 20 в %s
– станет ошибка Segmentation fault:
[simterm]
$ ./printfc Hello, World. Puts, World First is number 20 and second is string STRING TEXT. Segmentation fault (core dumped)
[/simterm]
Продолжение – C programming для начинающих: часть 5 – комментарии.