C programming для начинающих: часть 4 – printf

 

Предыдущая часть

Мы уже видели применение функции 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() подставляет данные в спецификаторы по очереди:

  1. %d – первый аргумент для printf() равен 20, будет подставлен сюда
  2. %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 – комментарии.