Выводить только числа c из файла

Обновлено: 02.07.2024

Введение в программирование на C/C++
Основной ввод и вывод текстовых файлов

Хранение двоичных и текстовых данных

  • Компьютеры обычно хранят числовые данные в двоичном формате, который подходит для обработки и хранения с помощью компьютерных микросхем, но не может быть прочитан человеком.
  • Текстовые представления данных состоят из ряда печатных символов, которые люди интерпретируют как числа, но которые компьютер не может напрямую использовать для расчетов.
  • Например, оператор "float pi = acos(-1.0);" будет выделять 32 бита двоичной памяти для числа с плавающей запятой и сохранять в этой памяти двоичное представление числа пи, обычно 1 знаковый бит плюс 23 бита информации о мантиссе (цифре) плюс 8 бит для хранения (двоичной) экспоненты. Компьютер может манипулировать этими данными для таких операций, как умножение и деление, но человек не сможет понять значение битов.
  • С другой стороны, если мы используем printf для вывода переменной на экран, то функция printf сгенерирует ряд символов, понятных человеку, и отправит их на экран. Например, компьютер может сгенерировать последовательность символов: «3», «.», «1», «4», «1», «5», «9». Эти семь символов по 8 бит каждый будут занимать в общей сложности 56 бит, что почти вдвое превышает общий объем памяти двоичного эквивалента.
  • Если фактические данные, которые необходимо сохранить, представляют собой текстовые символы, например простой документ, то уместно хранение в текстовом формате.
    • ( Если файл также не содержит двоичную информацию, такую ​​как информация о форматировании или изображения, в этом случае двоичный файл необходим. )

    Основы чтения и записи текстовых файлов

    1. Откройте файл с помощью fopen
    2. Чтение из файла с помощью fscanf или запись в файл с помощью fprintf
    3. Закройте файл с помощью fclose.

    открыть

    • Прежде чем файл можно будет использовать, его необходимо открыть. Одной из команд для этого является системный вызов fopen, у которого есть прототип:
      • Аргумент пути — это просто имя файла, который вы хотите открыть, либо в виде "строки в кавычках", либо в виде массива символов, содержащего имя файла, заканчивающееся нулевым байтом.
      • Режим указывает, следует ли открывать файл для чтения или записи (или для некоторых других вещей, о которых мы сейчас не будем беспокоиться), и выражается в виде строки в кавычках, например "r".
      • На данный момент нас интересуют только следующие режимы: r Открыть текстовый файл для чтения. Поток располагается в начале файла. r+ Открыт для чтения и записи. Поток располагается в начале файла. w Обрезать файл до нулевой длины или создать текстовый файл для записи. Поток располагается в начале файла. w+ Открыт для чтения и записи. Файл создается, если он не существует, в противном случае он усекается. Поток располагается в начале файла. a Открыть для добавления (запись в конец файла). Файл создается, если он не существует. Поток располагается в конце файла. a+ Открыть для чтения и добавления (запись в конец файла). Файл создается, если он не существует. Исходной позицией файла для чтения является начало файла, но выходные данные всегда добавляются в конец файла.
      • Создайте переменную типа FILE * и сохраните в ней значение, возвращаемое fopen.
      • Перед использованием проверьте возвращаемое значение, чтобы убедиться, что оно не равно NULL. Если fopen возвращает NULL, значит по какой-то причине не удалось открыть запрошенный файл.
      • ФАЙЛ *, возвращаемый fopen, потребуется позже, чтобы использовать файл.
      • Есть три предопределенных FILE *, которые особенно полезны:
        • stdin — стандартный ввод, обычно с клавиатуры.
        • stdout — стандартный вывод, обычно экран. (Хотя довольно часто стандартный вывод перенаправляется в файл для последующего использования.)
        • stderr — стандартная ошибка, также нормально отображается экран. Преимущество наличия как stdout, так и stderr заключается в том, что если «результаты» программы, записанные в stdout, перенаправляются в файл, то сообщения, записанные в stderr, по-прежнему отправляются на экран.

        fprintf и fscanf

        • fprintf и fscanf работают точно так же, как printf и scanf, за исключением того, что они принимают в начале дополнительный аргумент типа FILE *:

        int fprintf(ФАЙЛ *поток, const char *формат, . );

        int fscanf(ФАЙЛ * поток, const char *формат, .);

        A = fscanf( fileID , formatSpec ) считывает данные из открытого текстового файла в вектор-столбец A и интерпретирует значения в файле в соответствии с форматом, заданным formatSpec .Функция fscanf повторно применяет формат ко всему файлу и устанавливает указатель файла на маркер конца файла. Если fscanf не может сопоставить formatSpec с данными, он считывает только совпадающую часть и прекращает обработку.

        Текстовый файл обозначается идентификатором файла, fileID . Используйте fopen, чтобы открыть файл, указать кодировку символов и получить значение fileID. Когда вы закончите чтение, закройте файл, вызвав fclose(fileID) .

        A = fscanf( fileID , formatSpec , sizeA ) считывает данные файла в массив A с размерами sizeA и размещает указатель файла после последнего прочитанного значения. fscanf заполняет A в порядке столбцов. sizeA должен быть положительным целым числом или иметь форму [m n] , где m и n — положительные целые числа.

        [ A , count ] = fscanf( ___ ) дополнительно возвращает количество полей, которые fscanf считывает в A . Для числовых данных это количество прочитанных значений. Вы можете использовать этот синтаксис с любым из входных аргументов предыдущих синтаксисов.

        Примеры

        Чтение содержимого файла в вектор-столбец

        Создайте образец текстового файла, содержащего числа с плавающей запятой.

        Просмотрите содержимое файла.

        Откройте файл для чтения и получите идентификатор файла, fileID .

        Определите формат данных для чтения. Используйте '%f' для указания чисел с плавающей запятой.

        Прочитайте данные файла, заполнив выходной массив A в порядке столбцов. fscanf повторно применяет формат formatSpec ко всему файлу.

        A — это вектор-столбец, содержащий данные из файла.

        Читать содержимое файла в массив

        Создайте образец текстового файла, содержащего целые числа и числа с плавающей запятой.

        Просмотрите содержимое файла.

        Откройте файл для чтения и получите идентификатор файла, fileID .

        Определите формат данных для чтения и форму выходного массива.

        Прочитайте данные файла, заполнив выходной массив A в порядке столбцов. fscanf повторно использует формат formatSpec во всем файле.

        Транспонируйте массив так, чтобы A совпадала с ориентацией данных в файле.

        Пропускать определенные символы в файле

        Пропускать определенные символы в образце файла и возвращать только числовые данные.

        Создайте образец текстового файла, содержащего значения температуры.

        Прочитайте числа в файле, пропуская текст, °C. Также верните количество значений, которые считывает fscanf. Расширенный код ASCII 176 представляет знак градуса.

        A — это вектор, содержащий числовые значения в файле. count указывает, что fscanf прочитал пять значений.

        Входные аргументы

        fileID — Идентификатор файла
        целое число

        Идентификатор файла открытого текстового файла в виде целого числа. Перед чтением файла с помощью fscanf вы должны использовать fopen, чтобы открыть файл и получить идентификатор файла.

        Типы данных: двойной

        formatSpec — Формат полей данных
        вектор символов | строковый скаляр

        Формат полей данных в файле в виде вектора символов или строкового скаляра одного или нескольких спецификаторов преобразования. Когда fscanf читает файл, он пытается сопоставить данные с форматом, указанным formatSpec .

        Числовые поля

        В этой таблице перечислены доступные спецификаторы преобразования для числовых входных данных. fscanf преобразует значения в их десятичное представление (с основанием 10).

        Значения в файле определяют базу:

        По умолчанию используется основание 10.

        Если начальные цифры 0x или 0X , то значения являются шестнадцатеричными (с основанием 16).

        Если начальная цифра 0 , то значения восьмеричные (с основанием 8).

        64-битные значения, основание 10, 8 или 16

        Основание 16 (шестнадцатеричное)

        64-битные значения, основание 10, 8 или 16

        Поля с плавающей запятой могут содержать любое из следующих значений (без учета регистра): Inf , -Inf , NaN или -NaN .

        Символьные поля

        В этой таблице перечислены доступные спецификаторы преобразования для ввода символов.

        Вектор символов или строковый скаляр

        Читать все символы, кроме пробелов.

        Чтение любого отдельного символа, включая пробелы.
        Чтобы читать несколько символов одновременно, укажите ширину поля.

        Только для чтения символы в квадратных скобках до первого несовпадающего символа или пробела.

        Пример: %[mus] читается как "summer" как "summ".

        Если formatSpec содержит комбинацию числовых и символьных спецификаторов, то fscanf преобразует каждый символ в его числовой эквивалент. Это преобразование происходит, даже если формат явно пропускает все числовые значения (например, formatSpec равен '%*d %s').

        Необязательные операторы

        Поля и символы, которые следует игнорировать

        fscanf последовательно считывает все числовые значения и символы в вашем файле, если только вы не укажете ему игнорировать определенное поле или часть поля. Чтобы пропустить поля, вставьте звездочку ( * ) после знака процента ( %). Например, чтобы пропустить целые числа, укажите %*d .

        Чтобы указать максимальное количество цифр или текстовых символов для чтения за раз, вставьте число после символа процента.Например, %10c считывает до 10 символов за раз, включая пробелы. %4f считывает до 4 цифр за раз, включая десятичную точку.

        Буквальный текст, который следует игнорировать

        fscanf игнорирует указанный текст, добавленный к спецификатору преобразования formatSpec.

        C = textscan( fileID , formatSpec ) считывает данные из открытого текстового файла в массив ячеек, C . Текстовый файл обозначается идентификатором файла, fileID. Используйте fopen, чтобы открыть файл и получить значение fileID. Когда вы закончите чтение из файла, закройте файл, вызвав fclose(fileID) .

        textscan пытается сопоставить данные в файле со спецификатором преобразования в formatSpec . Функция textscan повторно применяет formatSpec ко всему файлу и останавливается, когда не может сопоставить formatSpec с данными.

        C = textscan(fileID, formatSpec, N) считывает данные файла с использованием formatSpec N раз, где N — положительное целое число. Чтобы прочитать дополнительные данные из файла после N циклов, снова вызовите textscan, используя исходный идентификатор файла. Если вы возобновите сканирование текста файла, вызвав textscan с тем же идентификатором файла ( fileID ), то textscan автоматически возобновит чтение с того места, где было завершено последнее чтение.

        C = textscan( chr , formatSpec ) читает текст из символьного вектора chr в массив ячеек C . При чтении текста из вектора символов повторные вызовы textscan каждый раз перезапускают просмотр с начала. Чтобы перезапустить сканирование с последней позиции, запросите вывод позиции.

        textscan пытается сопоставить данные в векторе символов chr с форматом, указанным в formatSpec .

        C = textscan( chr , formatSpec , N ) использует formatSpec N раз, где N — положительное целое число.

        C = textscan( ___ , Name,Value ) задает параметры, используя один или несколько аргументов пары Name,Value в дополнение к любым входным аргументам в предыдущих синтаксисе.

        [ C , position ] = textscan( ___ ) возвращает позицию в файле или вектор символов в конце сканирования в качестве второго выходного аргумента. Для файла это значение, которое ftell(fileID) вернет после вызова textscan. Для вектора символов позиция указывает, сколько символов textscan может прочитать.

        Примеры

        Чтение чисел с плавающей точкой

        Прочитайте вектор символов, содержащий числа с плавающей запятой.

        Спецификатор '%f' в formatSpec указывает textscan сопоставлять каждое поле в chr с числом с плавающей запятой двойной точности.

        Отобразить содержимое массива ячеек C .

        Прочитайте тот же вектор символов и усеките каждое значение до одной десятичной цифры.

        Спецификатор %3.1f указывает ширину поля, равную 3 цифрам, и точность, равную 1. Функция textscan считывает в общей сложности 3 цифры, включая десятичную точку и 1 цифру после запятой. Спецификатор %*1d указывает textscan пропустить оставшуюся цифру.

        Отобразить содержимое массива ячеек C .

        Чтение шестнадцатеричных чисел

        Прочитайте вектор символов, который представляет набор шестнадцатеричных чисел. Текст, представляющий шестнадцатеричные числа, включает цифры 0–9, буквы a–f или A–F и, при необходимости, префиксы 0x или 0X.

        Чтобы сопоставить поля в шестнадцатеричных числах с шестнадцатеричными числами, используйте спецификатор '%x'. Функция textscan преобразует поля в 64-битные целые числа без знака.

        Отобразить содержимое C в виде вектора-строки.

        Вы можете преобразовать поля в целые числа со знаком или без знака, имеющие 8, 16, 32 или 64 бита. Чтобы преобразовать поля в шестнадцатеричных числах в 32-разрядные целые числа со знаком, используйте спецификатор '%xs32'.

        Вы также можете указать ширину поля для интерпретации ввода. В этом случае префикс учитывается в ширине поля. Например, если вы установите ширину поля равной трем, как в %3x, то textscan разделит текст «0xAF 100» на три фрагмента текста: «0xA», «F» и «100». Три фрагмента текста рассматриваются как разные шестнадцатеричные числа.

        Чтение двоичных чисел

        Прочитайте вектор символов, который представляет набор двоичных чисел. Текст, представляющий двоичные числа, включает цифры 0 и 1 , а также необязательные префиксы 0b или 0B .

        Чтобы сопоставить поля в двоичных числах с двоичными числами, используйте спецификатор '%b'. Функция textscan преобразует поля в 64-битные целые числа без знака.

        Отобразить содержимое C в виде вектора-строки.

        Вы можете преобразовать поля в целые числа со знаком или без знака, имеющие 8, 16, 32 или 64 бита. Чтобы преобразовать поля в binnums в 32-разрядные целые числа со знаком, используйте спецификатор '%bs32'.

        Вы также можете указать ширину поля для интерпретации ввода. В этом случае префикс учитывается в ширине поля. Например, если вы установите ширину поля равной трем, как в %3b, то textscan разделит текст «0b1010 100» на три фрагмента текста: «0b1», «010» и «100». Он обрабатывает три фрагмента текста как разные двоичные числа.

        Чтение различных типов данных

        Загрузите файл данных и прочитайте каждый столбец с соответствующим типом.

        Загрузите файл scan1.dat и просмотрите его содержимое в текстовом редакторе. Скриншот показан ниже.


        Откройте файл и прочитайте каждый столбец с соответствующим спецификатором преобразования. textscan возвращает массив ячеек 1 на 9 C .

        Просмотрите тип данных MATLAB® каждой из ячеек в C .

        Изучите отдельные записи. Обратите внимание, что C и C являются массивами ячеек. C имеет тип данных uint32 , поэтому первые два элемента C являются максимальными значениями для 32-битного целого числа без знака или intmax('uint32') .

        Удалить буквенный текст

        Удалите буквальный текст "Уровень" из каждого поля во втором столбце данных из предыдущего примера. Предварительный просмотр файла показан ниже.


        Откройте файл и сопоставьте буквальный текст во входных данных formatSpec.

        Просмотрите тип данных MATLAB® второй ячейки в C . Вторая ячейка массива ячеек 1 на 9, C , теперь имеет тип данных int32 .

        Пропустить остаток строки

        Прочитайте первый столбец файла из предыдущего примера в массив ячеек, пропустив остальную часть строки.

        textscan возвращает даты массива ячеек.

        Укажите разделитель и преобразование пустого значения

        Загрузите файл data.csv и просмотрите его содержимое в текстовом редакторе. Снимок экрана показан ниже. Обратите внимание, что файл содержит данные, разделенные запятыми, а также содержит пустые значения.


        Прочитайте файл, преобразуя пустые ячейки в -Inf .

        textscan возвращает массив ячеек 1 на 6, C . Функция textscan преобразует пустое значение в C в -Inf , где C связан с форматом с плавающей запятой. Поскольку MATLAB® представляет целое число без знака -Inf как 0 , textscan преобразует пустое значение в C в 0 , а не в -Inf .

        Укажите текст, который будет считаться пустым, или комментарии

        Загрузите файл data2.csv и просмотрите его содержимое в текстовом редакторе. Снимок экрана показан ниже. Обратите внимание, что файл содержит данные, которые можно интерпретировать как комментарии и другие записи, такие как "Н/П" или "Н/П", которые могут указывать на пустые поля.


        Назначьте ввод, который textscan должен обрабатывать как комментарии или пустые значения, и отсканируйте данные в C .

        Показать вывод.

        Рассматривать повторяющиеся разделители как один

        Загрузите файл data3.csv и просмотрите его содержимое в текстовом редакторе. Снимок экрана показан ниже. Обратите внимание, что файл содержит повторяющиеся разделители.


        Чтобы рассматривать повторяющиеся запятые как один разделитель, используйте параметр MultipleDelimsAsOne и задайте для него значение 1 ( true ).

        Указание спецификаторов повторных преобразований и сбор числовых данных

        Загрузите файл данныхgrades.txt для этого примера и просмотрите его содержимое в текстовом редакторе. Снимок экрана показан ниже. Обратите внимание, что файл содержит повторяющиеся разделители.


        Прочитайте заголовки столбцов в формате '%s' четыре раза.

        Прочитайте числовые данные в файле.

        Значение по умолчанию для CollectOutput равно 0 ( false ), поэтому textscan возвращает каждый столбец числовых данных в отдельном массиве.

        Установите индикатор позиции файла в начало файла.

        Перечитайте файл и установите для параметра CollectOutput значение 1 (true), чтобы собрать последовательные столбцы одного класса в один массив. Вы можете использовать функцию repmat, чтобы указать, что спецификатор преобразования %f должен появиться три раза. Этот метод полезен, когда формат повторяется много раз.

        Оценки теста, которые все двойные, собираются в один массив 4 x 3.

        Чтение или пропуск текстовых и числовых полей в кавычках

        Прочитайте первый и последний столбцы данных из текстового файла. Пропустить столбец текста и столбец целочисленных данных.

        Загрузите файл named.txt и просмотрите его содержимое в текстовом редакторе. Снимок экрана показан ниже. Обратите внимание, что файл содержит два столбца текста в кавычках, за которым следует столбец целых чисел и, наконец, столбец чисел с плавающей запятой.


        Прочитайте первый и последний столбцы данных в файле.Используйте спецификатор преобразования %q для чтения текста, заключенного в двойные кавычки ( " ). %*q пропускает текст в кавычках, %*d пропускает целочисленное поле, а %f читает число с плавающей запятой. Укажите разделитель-запятую. используя аргумент пары "имя-значение" "Разделитель".

        Показать результат. textscan возвращает массив ячеек C, в котором удалены двойные кавычки, окружающие текст.

        Чтение дат на иностранном языке

        Загрузите файл german_dates.txt и просмотрите его содержимое в текстовом редакторе. Снимок экрана показан ниже. Обратите внимание, что первый столбец значений содержит даты на немецком языке, а второй и третий столбцы — числовые значения.


        Откройте файл. Укажите схему кодировки символов, связанную с файлом, в качестве последнего ввода для fopen .

        Прочитайте файл. Укажите формат дат в файле с помощью спецификатора %D. Укажите языковой стандарт дат с помощью аргумента пары "имя-значение" DateLocale.

        Просмотрите содержимое первой ячейки в C. Даты отображаются на языке, используемом MATLAB, в зависимости от языкового стандарта вашей системы.

        Чтение управляющих символов не по умолчанию

        Используйте sprintf для преобразования управляющих последовательностей не по умолчанию в ваших данных.

        Создайте текст, содержащий символ перевода формы \f . Затем, чтобы прочитать текст с помощью textscan , вызовите sprintf для явного преобразования канала формы.

        textscan возвращает массив ячеек C .

        Возобновить сканирование

        Возобновить сканирование с позиции, отличной от начала.

        Если вы возобновляете сканирование текста, textscan каждый раз читает с начала. Чтобы возобновить сканирование с любой другой позиции, используйте синтаксис аргумента с двумя выходами в вашем первоначальном вызове textscan .

        Например, создайте вектор символов с именем lyric . Прочитайте первое слово вектора символов, а затем возобновите сканирование.

        Входные аргументы

        fileID — идентификатор файла
        числовой скаляр

        Идентификатор открытого текстового файла в виде числа. Перед чтением файла с помощью textscan вы должны использовать fopen, чтобы открыть файл и получить идентификатор файла.

        Типы данных: двойной

        formatSpec — Формат полей данных
        вектор символов | строка

        Формат полей данных в виде вектора символов или строки одного или нескольких спецификаторов преобразования. Когда textscan считывает ввод, он пытается сопоставить данные с форматом, указанным в formatSpec. Если textscan не может сопоставить поле данных, чтение прекращается и возвращаются все поля, прочитанные до ошибки.

        Количество спецификаторов преобразования определяет количество ячеек в выходном массиве C .

        Числовые поля

        В этой таблице перечислены доступные спецификаторы преобразования для числовых входных данных.

        < /tr> < /tr> < /tr>
        Числовой тип вводаСпецификатор преобразованияВыходной класс
        Целое число со знаком %d int32
        %d8 int8
        %d16 int16
        %d32 int32
        %d64 int64
        Целое число, без знака %u uint32
        %u8 uint8
        % u16 uint16
        %u32 uint32
        %u64< /td> uint64
        Число с плавающей запятой %f double
        %f32 одинарный
        %f64 двойной
        %n double
        Шестнадцатеричное число, целое без знака %x uint64
        %xu8 uint8
        %xu16 uint16
        %xu32 uint32
        %xu64 uint64
        Шестнадцатеричное число, целое число со знаком %xs8 int8
        %xs16 int16
        %xs32 int32
        %xs64 int64
        Двоичное число, целое число без знака %b uint64
        %bu8 uint8
        %bu16 uint16
        %bu32 uint32
        %bu64 uint64
        Двоичное число, целое число со знаком %bs8 int8
        %bs16 int16
        %bs32 int32
        %bs64 int64

        Нечисловые поля

        В этой таблице перечислены доступные спецификаторы преобразования для входных данных, содержащих нечисловые символы.

        Прочитайте как массив ячеек из символьных векторов. Если текст начинается с двойной кавычки ( " ), опустите ведущую кавычку и сопровождающую ее закрывающую метку, которая является вторым экземпляром одиночной двойной кавычки.Замените экранированные двойные кавычки (например, ""abc"" ) одиночными двойными кавычками ("abc" ). %q игнорирует любые двойные кавычки, которые появляются после закрывающей двойной кавычки.

        Пример: «%q» читается как «Джо «Молния» Смит-младший» как «Джо «Молния» Смит-младший». .

        Прочитайте так же, как %q выше, а затем преобразуйте в значение даты и времени.

        Прочитайте так же, как %q выше, а затем преобразуйте его в значение даты и времени. fmt описывает формат вводимого текста. Входные данные fmt представляют собой вектор символов буквенных идентификаторов, который является допустимым значением для свойства Format объекта datetime. textscan преобразует текст, не соответствующий этому формату, в значения NaT.

        Дополнительную информацию о форматах отображения даты и времени см. в описании свойства Format для массивов даты и времени.

        Пример: "%D" указывает формат даты, такой как "01-янв-2014".

        Прочитайте так же, как %q выше, а затем преобразуйте в значение длительности.

        Прочитайте так же, как %q выше, а затем преобразуйте его в значение длительности. fmt описывает формат вводимого текста. Входные данные fmt представляют собой вектор символов буквенных идентификаторов, который является допустимым значением свойства Format длительности. textscan преобразует текст, не соответствующий этому формату, в значения NaN.

        Для получения дополнительной информации о форматах отображения длительности см. свойство format для массивов длительности.

        Пример: "%T" указывает формат продолжительности, например "10:30:15", что соответствует 10 часам, 30 минутам и 15 секундам.

        Читайте так же, как %q , а затем преобразуйте в название категории в массиве категорий. textscan преобразует текст в неопределенное значение в выходном категориальном массиве.

        Читайте как массив ячеек из символьных векторов, символы в квадратных скобках до первого несовпадающего символа. Чтобы включить ] в набор, сначала укажите его: %[]. ] .

        Пример: %[mus] читается как "summer" как "summ".

        Исключать символы внутри квадратных скобок, читая до первого совпадающего символа. Чтобы исключить ] , сначала укажите его: %[^]. ] .

        Пример: %[^xrg] читает "лето" как "лето".

        Необязательные операторы

        Спецификаторы преобразования в formatSpec могут включать необязательные операторы, которые появляются в следующем порядке (включая пробелы для ясности):

        В %*5.2f * означает игнорирование поля, 5 — ширина поля, .2 — точность, а f — символ преобразования». ширина=

        Необязательные операторы включают:

        Поля и символы, которые следует игнорировать

        textscan последовательно считывает все символы в вашем файле, если только вы не прикажете ему игнорировать определенное поле или часть поля.

        Вставьте символ звездочки (*) после символа процента (%), чтобы пропустить поле или часть символьного поля.

        Пропустить поле. k — любой спецификатор преобразования, определяющий поле, которое необходимо пропустить. textscan не создает выходную ячейку для таких полей.

        Пример: '%s %*s %s %s %*s %*s %s' (пробелы необязательны) преобразует текст
        'Черный дрозд поет глубокой ночью' в четыре выходные ячейки с
        'Черный дрозд' 'в' 'ночь'

        Пропустить до n символов, где n – целое число, меньшее или равное количеству символов в поле.

        Пример: '%*3s %s' преобразует 'abcdefg' в 'defg' . Когда разделителем является запятая, тот же разделитель преобразует 'abcde,fghijkl' в массив ячеек, содержащий 'de';'ijkl' .

        Пропустить n символов, включая символы-разделители.

        textscan считывает количество символов или цифр, заданное шириной или точностью поля, или до первого разделителя, в зависимости от того, что наступит раньше. Десятичная точка, знак ( + или - ), символ экспоненты и цифры в числовой экспоненте считаются как символы и цифры в пределах ширины поля. Для комплексных чисел ширина поля относится к индивидуальной ширине действительной и мнимой частей. Для мнимой части ширина поля включает + или -, но не i или j. Укажите ширину поля, вставив число после символа процента (%) в спецификаторе преобразования.

        Пример: %5f читает "123,456" как 123,4 .

        Пример: %5c читает 'abcdefg' как 'abcde' .

        Когда оператор ширины поля используется с одиночными символами ( %c ), textscan также считывает разделители, пробелы и символы конца строки.
        Пример: %7c считывает 7 символов, включая пробел, поэтому "День и ночь" читается как "День и".

        Для чисел с плавающей запятой ( %n , %f , %f32 , %f64 ) можно указать количество десятичных цифр для чтения.

        Пример: %7.2f читается как "123,456" как 123,45 .

        Буквальный текст, который следует игнорировать

        textscan игнорирует текст, добавляемый к спецификатору преобразования formatSpec.

        Функция библиотеки C int sprintf(char *str, const char *format, . ) отправляет форматированный вывод в строку, на которую указывает str.

        Декларация

        Ниже приведено объявление функции sprintf().

        Параметры

        str — это указатель на массив элементов char, в котором хранится результирующая строка C.

        формат — это строка, содержащая текст для записи в буфер. Он может дополнительно содержать встроенные теги формата, которые заменяются значениями, указанными в последующих дополнительных аргументах, и форматируются в соответствии с запросом. Прототип тегов формата: спецификатор %[flags][width][.precision][length], как описано ниже –

        Десятичное целое число со знаком

        Научное представление (мантисса/экспонента) с использованием символа e

        Научная запись (мантисса/экспонента) с использованием символа E

        Десятичная дробь с плавающей запятой

        Используется более короткая из %e или %f.

        Используется более короткая из %E или %f

        Строка символов

        Десятичное целое число без знака

        Шестнадцатеричное целое число без знака

        Шестнадцатеричное целое число без знака (заглавными буквами)

        Выравнивание по левому краю в пределах заданной ширины поля; Выравнивание по правому краю используется по умолчанию (см. спецификатор ширины).

        Заставляет предварять результат знаком плюс или минус (+ или -) даже для положительных чисел. По умолчанию знак -ve предшествует только отрицательным числам.

        Если знак не будет записан, перед значением вставляется пробел.

        При использовании со спецификаторами o, x или X значение предшествует 0, 0x или 0X соответственно для значений, отличных от нуля. При использовании с e, E и f он заставляет записанный вывод содержать десятичную точку, даже если за ней не следуют никакие цифры. По умолчанию, если цифры не следуют, десятичная точка не записывается. При использовании с g или G результат будет таким же, как с e или E, но нули в конце не удаляются.

        Дополняет число слева нулями (0) вместо пробелов, если указано заполнение (см. подспецификатор ширины).

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

        Ширина указывается не в строке формата, а как дополнительный целочисленный аргумент, предшествующий форматируемому аргументу.

        Для целочисленных спецификаторов (d, i, o, u, x, X) - точность указывает минимальное количество цифр, которые должны быть записаны. Если записываемое значение короче этого числа, результат дополняется ведущими нулями. Значение не усекается, даже если результат длиннее. Точность 0 означает, что для значения 0 не записывается ни один символ. Для спецификаторов e, E и f — это количество цифр, которые должны быть напечатаны после десятичной точки. Для спецификаторов g и G — это максимальное количество значащих цифр для печати. Для s — это максимальное количество символов для печати. По умолчанию печатаются все символы, пока не встретится конечный нулевой символ. Для типа c — не влияет. Если точность не указана, значением по умолчанию является 1. Если период указан без явного значения точности, предполагается 0.

        Точность указывается не в строке формата, а как дополнительный целочисленный аргумент, предшествующий аргументу, который необходимо отформатировать.

        Аргумент интерпретируется как short int или unsigned short int (применяется только к целочисленным спецификаторам: i, d, o, u, x и X).

        Аргумент интерпретируется как long int или unsigned long int для целочисленных спецификаторов (i, d, o, u, x и X) и как широкий символ или строка расширенных символов для спецификаторов c и s.

        Аргумент интерпретируется как длинное двойное значение (применяется только к спецификаторам с плавающей запятой — e, E, f, g и G).

        дополнительные аргументы — в зависимости от строки формата функция может ожидать последовательность дополнительных аргументов, каждый из которых содержит одно значение, которое будет вставлено вместо каждого%-тега, указанного в параметре формата (если есть). Этих аргументов должно быть столько же, сколько %-тегов, ожидающих значение.

        Возвращаемое значение

        В случае успеха возвращается общее количество записанных символов, за исключением нулевого символа, добавленного в конец строки, в противном случае в случае ошибки возвращается отрицательное число.

        Пример

        В следующем примере показано использование функции sprintf().

        Давайте скомпилируем и запустим приведенную выше программу, это даст следующий результат —

        Читайте также: