puts в C/C++: вывод строки на экран

Привет! В этой статье речь пойдет о функции puts. Эта функция используется в C/C++ для записи строки в стандартный вывод (обычно просто вывод на экран). Сначала мы посмотрим на то, как использовать эту функцию. Потом, мы разберем несколько примеров, а в конце будут упражнения для закрепления материала самостоятельно.

Иллюстрация puts

Как вывести строку на экран в C/C++

Для вывода строки на экран можно воспользоваться функцией puts. Эта функция становится доступна после подключения заголовочного файла <stdio.h>. В C++ вы можете подключить <cstdio>. Эта функция выглядит следующим образом:

int puts ( const char * str );
  • Единственным аргументом эта функция принимает указатель на строку, которую нужно вывести на экран.
  • Если произошла ошибка, функция возвращает -1. Иначе, puts вернет положительное число (может вернуть любое).

Давайте посмотрим на пример:


#include <stdio.h>

int main() {
  int n = puts("C puts");
  printf("n = %d \n", n);

  return 0;
}

Вывод программы:

C puts
10 

Важный момент: puts добавляет символ новой строки '\n' к концу вывода. Поэтому нам не нужно добавлять его самим:

puts("AB");
puts("CD");

Выведет:

AB
CD

В этом плане puts отличается от printf, который не переносит строку автоматически:

printf("AB");
printf("CD");

Вывод:

ABCD

Какой будет вывод следующей программы?

#include <stdio.h>

int main() {
  puts("Hello ");
  printf("World");
  puts("!");

  return 0;
}
Hello World!
Hello
World!
Hello World
!
Hello
World
!

Вывод строки на экран с помощью printf

Если нам нужно вывести строку на экран без символа новой строки, то у нас есть два варианта. Первый мы уже видели, можно просто воспользоваться функцией printf в случае с простой строкой. Но что, если в строке есть проценты:

printf("100%");

В этом случае, printf выведет не то, что нам нужно. Чтобы быть уверенным, что строка будет выведена как она есть, мы можем использовать спецификатор формата %s:

printf("%s", "100%");

В этом случае printf выведет строку на экран даже с процентами. Если вам не нравится решение с printf, то не беда. Мы можем воспользоваться другой функцией.

fputs для вывода на экран

Функция fputs является аналогом puts для вывода в файл. Однако, передав stdout в качестве файла для записи, мы можем заставить её выводить информацию на экран:

fputs("AB", stdout);
fputs("CD", stdout);

Вывод:

ABCD

Как вы можете видеть, fputs не добавляет символ переноса строки в конец вывода.

Вы можете использовать fputs вместо любого вызова puts передав stdout в качестве файла для вывода и добавив '\n' в конец выводимой строки:

fputs("fputs vs puts\n", stdout);
// тоже самое
puts("fputs vs puts");

Реализация puts

Давайте попробуем реализовать свою версию функции puts, чтобы лучше понять как она работает:

#include <stdio.h>

int my_puts(const char* s) {
  while (*s != '\0') {
    int result = putchar(*s);
    if (result < 0) {
      return result;
    }

    s++;
  }

  return putchar('\n');
}

int main() {
  my_puts("AB");
  my_puts("CD");

  return 0;
}

Вывод:

AB
CD

Тут вы уже можете поменять логику как хотите. Можете выводить, можете не выводить '\n' в конце. Все зависит от ваших предпочтений.

Упражнения

  1. Использование функции puts:

    • Напишите программу на языке C, которая использует функцию puts для вывода на экран фразы “Привет, мир!“.
    • Добавьте в вашу программу функцию printf для вывода этой же фразы. Сравните результаты.
    • Обратите внимание на то, как функции выводят текст на экран. В чем разница?
  2. Эксперименты с функцией fputs:

    • Напишите программу, которая использует fputs для вывода на экран двух строк: “Hello” и “World”, так чтобы они были на одной строке.
    • Затем используйте puts для того же самого. Обратите внимание на различие в выводе.
  3. Создание своей версии puts:

    • Попробуйте реализовать свою версию функции puts, назвав ее my_puts. Ваша функция должна принимать строку в качестве аргумента и выводить ее на экран, добавляя символ новой строки.
    • Продемонстрируйте работу вашей функции на примере вывода фразы “Это моя версия функции puts!“.

Обсуждение