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