Лекции. Основные понятия и определения
Скачать 1.94 Mb.
|
12.1. Спецификация "s" управляющей строки функций scanf и printfПредназначена для ввода-вывода символьных строк. Напомним, что в языке C определены только строковые литералы, которые представляют собой последовательность символов, завершающуюся нулевым символом. В качестве переменных применяются массивы типа char. Все функции ввода строк добавляют конечный нулевой символ. Ввод. Формат спецификации: % [w]s. Поле ввода ограничивается параметром спецификации w либо символами пробел или перевод строки (клавиша Enter). Пример. %5s [Ивано]в // Будет введен текст, заключенный в [ ] Замечание. Ограничитель ввода остается в потоке и будет восприниматься последующими инструкциями ввода, что может привести к некоторым неожиданным последствиям. Например, следующая за функцией scanf функция gets, у которой символ перевод строки является ограничителем, введет пустую строку. Вывод. Формат спецификации: %[w][.d]s. Ограничителем является конечный нулевой символ либо параметр d спецификации. Пример. Выводимая строка имеет значение: "Привет, Коля!". На экране получим: %s Привет, Коля! %.6s Привет 12.2. Функции getchar и putcharПрототип: int getchar( ); - чтение одного символа с клавиатуры. Файл прототипа: stdio.h. Возвращаемое значение: символ (при успешном вводе)или EOF (ошибка ввода или конец файла). Признак конца файла при вводе: символы Ctrl+z. Прототип: int putchar(int); - вывод одного символа на экран. Файл прототипа: stdio.h. Возвращаемое значение: символ (успех)|EOF (ошибка). Пример. // Чтение строки с терминала. // Возвращает указатель на строку и ее длину char getline(int lim, // Максимальная длина вводимой строки char *s){ // Вводимая строка char c, // Вводимый символ i; for(i=0; i s[ i ]=c; } s[ i ]='\0'; return i; } // End getline 12.3. Функции gets и putsПрототип: char* gets(char*); - чтение строки символов. Файл прототипа: stdio.h. Возвращаемое значение: указатель на введенную строку (успех) | NULL- "пустой" указатель. Ограничитель ввода: символ перевод строки, который после ввода заменяется на конечный нулевой символ. Пример. char string[20]; ................ gets(string); Замечание. Можно включать в строку пробелы в отличие от спецификации s функции scanf. Прототип: int puts(char*); - вывод на экран строки символов. Файл прототипа: stdio.h. Возвращаемое значение: последний выведенный символ (успех) | EOF (конец файла). Замечание. Конечный 0 не выводится. В конец строки добавляется символ перевод строки. 12.4. Внутренняя передача данных (функции sscanf и sprintf)Эти функции являются функциями преобразования данных, а не ввода-вывода, однако правила преобразования те же, что и для соответствующих функций ввода-вывода. Преобразование из символьной строки во внутреннее представление. Прототип: int sscanf(char *buf, char *control, аргумент[, аргумент]...); Здесь buf – исходная строка, control – управляющая строка. Возвращаемое значение – см.функцию scanf. Преобразование из внутреннего представления в символьную строку. Прототип: int sprintf(char *buf, char *control, аргумент[, аргумент]...); Файл прототипов обеих функций: stdio.h. Возвращаемое значение: длина сформированной строки - число байтов без конечного 0, который добавляется или EOF (при ошибке). Пример. i=4; a[ i ] = -37.45; sprintf(mult, "%.5g%3s%d", a[ i ], "x**" ,i ); Результат будет иметь вид: < -37.45x**4>. |