Пятница, 25.07.2025, 02:58

Приветствую Вас Гость | RSS
Мой сайт
ГлавнаяРегистрацияВход
Меню сайта

Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0

Главная » 2017 » Февраль » 23 » String : Обьявление Scanf
18:14
String : Обьявление Scanf

utf-8C++. Lecture 6. Input/Ouptut. String type

Лекция 6. Ввод и вывод. Тип String

В стиле C

Язык C был реализован для операционной системы UNIX.

В операционной системе UNIX любое устройство считается файлом. Имя - ссылка на файл, следовательно, имен у файла может быть несколько.

Права доступа принадлежат файлу, а не его имени (именам).

Например, в Linux существуют следующие файлы:

/dev/null Вывод в него равносилен игнорированию вывода
/dev/cdrom Файл, соответствующий CD-ROM
/dev/hwrandom При чтении из данного файла в потоке оказываются случайные числа

При запуске программы сразу оказываются открытыми следующие файлы:

stdout
stdin
stderr

stdout, stdin, stderr являются глобальными переменными типа FILE.

Для ввода и вывода в стиле C используются следующие функции:

printf
scanf

Чтобы работать с этими функциями, необходимо:

#include <cstdio>

printf

#include <cstdio>
int printf(const char * Format, ...);

Функция printf() записывает в поток stdout свои аргументы в соответствии с форматной строкой Format.

Строка Format может содержать элементы двух видов:

  • символы, подлежащие выводу на экран;
  • спецификаторы формата, определяющие способ представления аргументов на экране.

printf("Hello!");
printf("Number is %d!", 10);

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

Спецификаторы формата функции printf() Код Формат %c Символ %d Десятичное челое число со знаком %i Десятичное челое число со знаком %e Научный формат (строчная буква e) %E Научный формат (прописная буква E) %f Десятичное число с плавающей точкой %g В зависимости от того, какой формат короче, применяется либо %e, либо %f %G В зависимости от того, какой формат короче, применяется либо %E, либо %f %o Восьмеричное число со знаком %s Строка символов %u Десятичное целое число без знака %x Шестнадцатеричное число без знака (строчные буквы) %X Шестнадцатеричное число без знака (прописные буквы) %p Указатель %n Указатель на целочисленную переменную. Спецификатор вызывает присвоение этой целочисленной переменной количества символов, выведенных перед ним %% Знак %

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

char * str;
printf(s);
printf("%s", str);

Функция printf() возвращает количество фактически напечатанных символов. Отрицательное число означает ошибку.

Коды формата могут иметь модификаторы:

  • Спецификатор минимальной ширины поля
    Целое число, указанное между знаком процента % и кодом формата.

    Спецификатор %04d заполнит нулями пустующие позиции поля ввода, если количество цифр в целом силе, подлежащем выводу, будет меньше четырех.

  • Модификатор точности
    Зависит от кода модифицируемого формата. Указывается после спецификатора ширины поля и десятичной точки.
    Для форматов e, E и f модификатор точности означает количество цифр после десятичной точки.

    Форматный код %9.3f выведет на экран число, отведя под него 9 позиций, 3 из которых размещаются после десятичной точки.

    Если модификатор применяется к спецификаторам %g или %G, он задает количество значащих цифр.
    Если модифиатор точности применяется к целым типам, он задает минимальное количество цифр, из которых должно состоять число. Если число состоит из меньшего количества цифр, оно дополняется ведущими нулями.
    Если модификатор используется для вывода строк, он задает максимальную длину поля.

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

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

    Спецификатор %-10d выравнивает целое число по левому краю поля, состоящего из десяти позиций.

  • Для вывода значений переменных типа short int используется модификатор h.
  • Для вывода значений переменных типа long int используется модификатор l.
  • Модификатор L можно использовать как префикс перед спецификаторами e, f, g. Он означает, что на экран выводится значение типа long double.
  • Спецификатор формата %n заставляет функцию printf() записывать в соответствующую переменную количество символов, уже выведенных на экран. Спецификатору %n должен соответствовать целочисленный указатель. После завершения функции printf() этот указатель будет ссылаться на переменную, в которой содержится количество символов, выведенных до спецификатора %n.
  • Модификатор #
    Стоящий перед спецификаторами g, G, f, e или E, гарантирует, что число будет содержать десятичную точку, даже если оно не имеет дробной части.
    Если этот модификатор стоит перед спецификаторами x или X, шестнадцатеричные числа выводятся с префиксом 0x.
    К другим спецификаторам модификатор # применять нельзя.
  • Модификатор *
    Используется для того, чтобы задавать ширину поля и точность представления числа с помощью переменных. При сканировании строки вывода функция printf() поочередно сопоставляет модификатор * с каждым аргументом. printf( "%*d" , 5, 10);

scanf

#include <cstdio>
int scanf(const char * Format, ...);

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

Язык Си в примерах/Учимся складывать — Викиучебник

Как и в случае функций (в том числе main ), объявление переменных в Си ... Как и printf , функция scanf объявлена в заголовке (англ. header) stdio.h .
https://ru.wikibooks.org/wiki/%D0%AF%D0%B7%D1%8B%D0%BA_%D0%A1%D0%B8_%D0%B2_%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80%D0%B0%D1%85/%D0%A3%D1%87%D0%B8%D0%BC%D1%81%D1%8F_%D1%81%D0%BA%D0%BB%D0%B0%D0%B4%D1%8B%D0%B2%D0%B0%D1%82%D1%8C

Управляющая строка состоит из символов, разделенных на три категории:

Глава 7 - 7.4. Форматный ввод (scanf) - NETLIB - Narod.ru

Ее объявление имеет следующий вид: int scanf(char *format, ...) Функция scanf читает символы из стандартного входного потока, интерпретирует их ...
http://netlib.narod.ru/library/book0003/ch07_04.htm

  • спецификаторы формата,
  • разделители,
  • символы, не являющиеся разделителями.

Перед спецификаторами формата стоит символ %, определяющий тип данных, подлежащих вводу.

Спецификаторы формата функции scanf() Код Формат %c Символ %d Десятичное челое число со знаком %i Десятичное челое число со знаком, восьмеричное или шестнадцатеричное число %e, %E Десятичное число с плавающей точкой %f Десятичное число с плавающей точкой %g, %G Десятичное число с плавающей точкой %o Восьмеричное число %s Строка символов %u Десятичное целое число без знака %x Шестнадцатеричное число без знака (строчные буквы) %X Шестнадцатеричное число без знака (прописные буквы) %p Указатель %n Указатель на целочисленную переменную. Спецификатор вызывает присвоение этой целочисленной переменной количества символов, введенных перед ним %[] Набор сканируемых символов

Все параметры передаются в функцию scanf() передаются по адресу.

Можно заставить функцию scanf() считывать поле, не присваивая его ни одной переменной. Для этого перед кодом соответствующего формата следует поставить символ *. Например:

scanf("%d%*c%d", &x, &y);

В форматной строке можно указать модификатор максимальной ширины поля.Это целое число между символом % и кодом формата. Это позволит ограничить количество считываемых функцией символов:

scanf("%20s", name);

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

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

%[ABC]
%[^XYZ]

Функция scanf() возвращает количество успешно введенных полей. В это число не входят считанные, но не присвоенные каким-либо переменным, поля. Если до первого присваивания произошла ошибка, то функция возвращает константу EOF.

Модификаторы l, L и h используются аналогично использованию в функции printf().

Функции printf() и scanf() не проверяют типы!


char str[100];
scanf("%s", &str);


Поэтому не стоит пользоваться функцией scanf() для считывания строк.


puts

#include <cstdio>
int puts(const char * str);

Функция puts() записывает в поток stdin содержимое строки, на которую ссылается указатель str. Нулевой символ, служащий индикатором конца файла, преобразуется в символ перехода на новую строку.

В случае успеха puts() возвращает положительное число, в противном случае константу EOF.

gets

#include <cstdio>
char * gets(char * str);

Функция gets() считывает символы из потока stdin и помещает их в символьный массив, на который ссылается указатель str. Символы считываются до тех пор, пока не встретится символ перехода на новую строку или признак конца файла. Символ перехода на новую строку не сохраняется и преобразуется в нулевой байт, служащий признаком конца строки.

В случае успеха - возвращает указатель str, при неудаче - нулевой указатель.

getch

#include <conio.h>
int getch();

Считывает символ с клавиатуры и не выводит его на экран, не ожидает перехода на новую строку.
Вазвращает код ASCII символа, прочтанного из клавиатурного буфера.

Файловый ввод/вывод

Указатель файла

Указатель файла - указатель на структуру типа FILE. В этой структуре хранится информация о файле, в частности его имя, статус и текущее положение курсора. Объявление указателя файла:

FILE *fp;

Для использоваия приведенных ниже функций необходимо подключить заголовочный файл stdio.h:

#include <cstdio>

fopen

Открывает поток и связывает его с файлом, возвращает указатель на этот файл. Если во время открытия файла произойдет ошибка, функция fopen() вернет нулевой указатель.

FILE * fopen(const char * fileName, const char * mode);

Допустимые значения параметра mode (режим) Значение Смысл r Открыть текстовый файл для чтения w Открыть текстовый файл для записи a Добавить записи в конец текстового файла rb Открыть бинарный файл для чтения wb Открыть бинарный файл для записи ab Добавить записи в конец бинарного файла r+ Открыть текстовый файл для чтения и записи w+ Создать текстовый файл для чтения и записи a+ Добавить записи в конец текстового файла или создать текстовый файл для чтения и записи r+b Открыть бинарный файл для чтения и записи w+b Создать бинарный файл для чтения и записи a+b Добавить записи в конец бинарного файла или создать бинарный файл для чтения и записи

fclose

Закрывает поток, открытый ранее функцией fopen(). Она записывает все оставшиеся в буфере данные в файл и закрывает его.

int fclose(FILE * fp);

putc, fputc

Запись символа character в файл, открытый с помощью функции fopen(). Если выполнена успешно, то возвращает символ, записанный в файл; в противном случае - константу EOF.

int putc(int character, FILE * fp);
int fputc(int character, FILE * fp);

getc, fgetc

Считывает символ из файла.

int getc(FILE * fp);
int fgetc(FILE * fp);

fputs, fgets

Функция fputs() записывает в заданный поток строку str, при возникновении ошибки возвращает константу EOF.

Функция fgets() считывает строку из указанного потока, пока не обнаружит символ перехода или не прочитает (length - 1) символов. Результирующая строка содержит символ перехода и заканчивается нулевым символом. В случае успеха функция возвращает указатель на введенную строку, в противном случае - нулевой указатель.

int fputs(const char * str, FILE * fp);
char * fgets(char * str, int length, FILE * fp);

fprintf, fscanf

Аналогичны функциям printf() и scanf() за исключением того, что работают с файлами.

int fprintf(FILE * fp, const char * Format, ...);
int fscanf(FILE * fp, const char * Format, ...);

fprintf(stdout, ...); // аналогично printf(...);
fscanf(stdin, ...); // аналогично scanf(...);
fprintf(stderr, ...); // запись в поток stderr

fflush

Записывает содержимое буфера в файл, связанный с указателем fp. При вызове с нулевым аргументом, все данные из всех буферов будут записаны во все файлы, открытые для записи.
В случае успешного выполнения возвращает 0, иначе - константу EOF.

int fflush(FILE * fp);

feof

При обнаружении конца файла возвращает истинное значение, в противном случае - 0.

int feof(FILE * fp);

ferror

Возвращает истинное значение, если при выполнении операции произошла ошибка, в противном случае возвращает ложное значение.

int ferror(FILE * fp);

В стиле C++

#include iostream>

Встроенные потоки:

В начале выполнения программы на языке C++ автоматически открываются следующие файлы:

Потоки Значение Устройство по умолчанию std::cin Стандартный ввод Клавиатура std::cout Стандартный вывод Экран std::cerr Стандартный вывод ошибок Экран

Запись в файл производится с помощью оператора <<, а чтение - с помощью оператора >>.

#include <iostream>
int a = 0;
double d = 0;
std::cin >> a >> d; //запись значений
std::cout << a << d; //вывод без пробелов
std::cout << a << " " << d; //вывод значений с разделением их пробелом

Стандартные потоки сами определяют типы аргументов, для вывода не нужна форматная строка.

std::cout << std::endl; //делает очистку буфера и ставит символ конца строки
std::cout << "\n";//символ конца строки

Написание

using namespace std;

избавляет от написания std:: перед названиями потоков ввода/вывода. Директива using может быть указана в начале файла программы, в начале функции и пр.

Файловый ввод/вывод

#include <fstream>
std::ifstream f( "input.txt" ); //Поток ввода
std::ofstream h( "output.txt" ); //Поток вывода
std::fstream io( "inout.txt" ); //Поток ввода-вывода
f >> ...;
h << ...;
f.flush(); //Принудительная запись информации из буфера в файл
f.close(); //Но при выходе из функции файл будет закрыт автоматически

f.open(const char * filename, ios_base::openmode mode = ios_base::in | ios_base::out);

Тип String

#include <string>
std::string s;
s = "Mama";
s += " and Papa";

Использование класса String избавляет от необходимости думать о том, как происходит работа внутри объекта.

Конструкторы:

string();
string( const char * str );
string( const string & str );

Определенные операторы:

Оператор Значение Оператор Значение = Присвоение Меньше или равно + Конкатенация > Больше += Присвоение и конкатенация >= Больше или равно == Равенство [] Индексация != Неравенство << Вывод < Меньше >> Ввод
Просмотров: 444 | Добавил: supoinclus | Рейтинг: 0.0/0
Всего комментариев: 0
Вход на сайт

Поиск

Календарь
«  Февраль 2017  »
Пн Вт Ср Чт Пт Сб Вс
  12345
6789101112
13141516171819
20212223242526
2728

Архив записей

Друзья сайта
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz


  • Copyright MyCorp © 2025Бесплатный хостинг uCoz