среда, 25 октября 2017 г.

Символьный ввод на Си



/*ФУНКЦИИ ВВОДА-ВЫВОДА ПЕРЕМЕЩАЮТ ИНФОРМАЦИЮ В ПРОГРАММУ И ИЗ НЕЕ 
пример таких функций 
printf(), scanf(), getchar(), putchar()
getchar() аналог scanf() -> получение входных данных от пользовател
putchar() аналог printf() -> вывода на экран

Многие программы сталкиваются с одной важной задачей - ПРОВЕРКОЙ ДОПУСТИМОСТИ ВХОДНЫХ ДАННЫХ Т.Е.
выяснением, ввел ли пользователь данные, которые ожидаются программой.

БУФЕР - временный область для хранения данных.
Бывает вход БУФЕРИЗИРОВАННЫЙ и НЕБУФЕРИЗИРОВАННЫЙ
НЕБУФЕРИЗИРОВАННЫЙ - содержимое немедленно становится доступным для программы
БУФЕРИЗИРОВАННЫЙ - По мере набора символы пересылаются в буфер друг за другом

ФАЙЛ - это область памяти, в которой хранится информация.
Есть программы, которые открывают, записывают, читают и закрывают файлы.
У языка С есть много библиотечных функций, предназначенных для открытия, закрытия, записи,
чтения файлов.
НИЗКОУРОВНЕВЫЙ ВВОД-ВЫВОД - базовые инструменты для работы с файлами операционной системы.
Программа на С имеет дело с ПОТОКОМ, а не напрямую с файлом.
ПОТОК - это идеализированное течение данных, на которое отображается действительный ввод или вывод.

Операционная система нуждается в каком-то способе для выясненеия, где начинается и где заканчивается
каждый файл. Один из методов обнаружения конца файла предусматривает помещение в файл специального
символа, помечающего его конец.
EOF - End of File - конец файла
*/

//ПРИМЕР 
#include <stdio.h> //КОМАНДА ПРЕПРОЦЕССОРА. Подключение файла из стандартной библиотеки компилятора С. Заголовочный файл.
int main(void) //ИМЯ ФУНКЦИИ С АРГУМЕНТАМИ. Имя функции - main(). Функция которая всегда присуствует в программе на С.
//void - говорит о том, что функция main() не принимает никаких аргументов
{
int ch; //ОПЕРАТОР ОБЪЯВЛЕНИЕ ПЕРЕМЕННОЙ имя ch, тип данных - int целочисленный
printf("Enter the word \n"); //ОПЕРАТОР ВЫЗОВА ФУНКЦИИ с именем printf() - функция вывода на экран
while ((ch = getchar()) !=EOF) //ch = getchar() аналог scanf()  - читает следующий входной символ, EOF - end of file
putchar(ch); // putchar(ch) аналог printf() выводи переданный ей аргумент
return 0;
}
ВЫВОД НА ЭКРАН
Enter the word
SYMBOL
SYMBOL
--------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------

ch = getchar(); //аналог scanf("%c", &ch); %c - СПЕЦИФИКАТОР для чтения и вывода символов
//Оператор читает следующий входной символ и присваивает его значение переменной ch
//& СПЕЦИФИКАТОР чтения типов из одного базового элемента

putchar(ch); //аналог printf("%c", ch); Оператор выводит переданный ей аргумент.
//Оператор выводит значение, ранее присвоенное переменной ch

//ПЕРЕНАПРАВЛЕНИЕ
/*ОПЕРАЦИЯ ПЕРЕНАПРАВЛЕНИЕ - соединяет ИСПОЛНЯЕМУЮ программу (равно как и стандартные команды ОС) с файлом данных.
ПЕРЕНАПРАВЛЕНИЕ ВЫВОДА В ФАЙЛ (>)
prog > file1

ПЕРЕНАПРАВЛЕНИЕ ВВОДА ИЗ ФАЙЛА (<)
prog < file2
*/
#include <stdio.h> //КОМАНДА ПРЕПРОЦЕССОРА. Подключение файла из стандартной библиотеки компилятора С. Заголовочный файл.
#include <stdlib.h> //Для функции exit() Заголовочный файл
int main() //ИМЯ ФУНКЦИИ С АРГУМЕНТАМИ. Имя функции - main(). Функция которая всегда присуствует в программе на С.
//void - говорит о том, что функция main() не принимает никаких аргументов
{
int ch; //ОПЕРАТОР ОБЪЯВЛЕНИЕ ПЕРЕМЕННОЙ имя ch, тип данных - int целочисленный
FILE * fp;
char fname[50]; //ОПЕРАТОРА ОБЪЯВЛЕНИЕ МАССИВА с именем fname в котором 50 элементами, каждый из которых может содежать в себе значение char -cимвол
//для хранения имени файла
printf("Введите имя файла: "); //ОПЕРАТОР ВЫЗОВА ФУНКЦИИ с именем printf() имеет один аргумент

/*получить входные данные от пользователя*/
scanf("%s", fname); //ОПЕРАТОР ВЫЗОВА ФУНКЦИИ с именем scanf() имеет два аргумента, считывает только слово
fp = fopen(fname, "r"); //открыть файл для чтения
if (fp == NULL) //попытка завершилась неудачей
{
printf("Не удается открыть файл. Прорамма завершена. \n "); //ОПЕРАТОР ВЫЗОВА ФУНКЦИИ с именем printf() имеет один аргумент
exit(1); //выйти из программы
}
//функция getc(fp) получает символ из открытого файла
while ((ch = getc(fp)) !=EOF) //ch = getc() аналог scanf()  - читает следующий входной символ, EOF - end of file
putchar(ch); // putchar(ch) аналог printf() выводи переданный ей аргумент
fclose(fp); //закрыть файл
return 0;
}
ВЫВОД НА ЭКРАН
Введите имя файла: exer4_1.c
Не удается открыть файл. Прорамма завершена.


%s - //спецификатор преобразования для обработки ввода и вывода строки
& //СПЕЦИФИКАТОР чтения типов из одного базового элемента
%c  // СПЕЦИФИКАТОР для чтения и вывода символов

Комментариев нет:

Отправить комментарий