Мы уже видели применение функции 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 — комментарии.