- •Раздел 1. Языки программирования
- •Программное обеспечение. Основные этапы решения задач на эвм. Жизненный цикл программного средства.
- •7. Решение задачи на эвм и анализ результатов
- •Основная структура программы.
- •Эквивалентность типов
- •Преобразование типов
- •Разбор программы
- •1.3. Логический тип. Ветвления. Оператор условного перехода. Полная и сокращённая форма условного оператора. Составные условия
- •1.4 Символьный тип и функции для обработки символьного типа. Перевод символьного представления числа в целый тип.
- •1.5 Оператор выбора
- •1.6. Операторы цикла. Оператор цикла с предусловием. Оператор цикла с постусловием. Оператор цикла с параметром
- •1.7 Процедуры и функции. Параметры, локальные и глобальные переменные. Передача параметров по адресу и по значению.
- •Локальные и глобальные переменные
- •Регулярный тип (массивы). Описание массивов. Ввод и вывод элементов массива. Нахождение максимального (минимального) элемента массива.
- •Обработка матриц. Поиск заданного элемента в матрице.
- •Работа с динамическими переменными. Динамические массивы.
- •1.11. Файловый ввод-вывод. Работа с текстовыми и двоичными файлами.
- •Чтение файла при помощи fgetc. Функция fgetc применяется для чтения символа из потока.
- •Чтение файла при помощи fgets
- •Запись в файл при помощи fwrite
- •1.12. Микропроцессор Intel х86. Регистры. Команды обмена данными. Команды работы со стеком.
- •1.13 Микропроцессор Intel х86. Арифметические команды. Логические команды и команды сдвига. Команды передачи управления.
- •Двоичная арифметика
- •Десятичная арифметика
- •Логические операции
- •Сдвиговые операции
- •Команды передачи управления
- •1.14 Микропроцессор Intel х86. Способы адресации: регистровая, непосредственная, прямая, косвенная. Регистровая адресация
- •Непосредственная адресация
- •Прямая адресация
- •Косвенная адресация
Чтение файла при помощи fgetc. Функция fgetc применяется для чтения символа из потока.
int fgetc(FILE *fp);
В случае успеха, fgetc возвращает следующий байт или символ из потока (зависит от того, файл "двоичный" или "текстовый"). В противном случае, fgetc возвращает EOF. (Отдельный тип ошибок можно определить вызовом ferror или feof с указателем на файл.)
Чтение файла при помощи fgets
Функция fgets применяется для чтения строки из потока. Считывание происходит до тех пор пока не будет достигнут конец строки (hex:0D0A, эквивалентны в листингах \n) или длина строки n, в которую происходит считывание.
char *fgets(char *string, int n, FILE *fp);
Функция fgets возвращает указатель на строку string. В случае ошибки или конца файла возвращается значение NULL. Для определения того, что произошло - ошибка или конец файла, используются функции feof и ferror.
Чтение файла при помощи fread
int fread (char *buffer, int size, int count, FILE *fp);
Данная функция читает объекты размера size по счетчику count из входного потока fp и располагает их в буфере buffer. fread возвращает число действительно прочитанных объектов, которое меньше, чем count, если при чтении возникла ошибка или встретился конец файла.
Запись в файл при помощи fwrite
fwrite определяется как
int fwrite ( const char * array, size_t size, size_t count, FILE * stream );
Функция fwrite записывает блок данных в поток. Таким образом запишется массив элементов count в текущую позицию в потоке. Для каждого элемента запишется size байт. Индикатор позиции в потоке изменится на число байт, записанных успешно. Возвращаемое значение будет равно count в случае успешного завершения записи. В случае ошибки возвращаемое значение будет меньше count.
Запись в поток при помощи fputc
Функция fputc применяется для записи символа в поток.
int fputc(int c, FILE *fp);
Параметр c "тихо" конвертируется в unsigned char перед выводом. Если прошло успешно, то fputc возвращает записанный символ. Если ошибка, то fputc возвращает EOF.
Запись в поток при помощи fputs
int fputs (char *string, FILE *fp);
Функция fputs копирует строку в конец потока fp. Нулевой символ окончания '\0' не копируется. Возвращает последний записанный символ. Если вводимая строка string пустая, возвращается значение 0. Значение EOF свидетельствует об ошибке.
Форматный ввод из файла fscanf
int fscanf(FILE *fp, char *format[,arguments]);
Возвращает количество успешно проведенных преобразований. Процесс заканчивается при встрече первой неподходящей литеры или признака конца файла (EOF). Ноль на выходе означает, что не обработано ни одного поля. (format описан ниже =>)
fscanf("%i %i",&x1,&x2);
Форматный вывод в файл fprintf
int fprintf(FILE *fp, char *format[,arguments]);
Функция fprintf форматирует и печатает в выходной поток наборы символов и значений. Каждый аргумент (если он есть) преобразуется и выводится согласно заданной спецификации формата в строке формата. Строка формата (format) обладает той же формой и функцией, что и аргумент строки формата функции printf.
fprintf("Вывод = %d,%f\n",i,r);
=> Элемент формата(format) представляет собой последовательность :
% [ - ] [ длина поля ] [ . точность ] [ l ] спецификация типа
“ - “ означает сдвиг выводимых данных к левому краю поля ( по умолчанию данные сдвигаются вправо); длина поля - количество позиций для вывода; точность - количество дробных цифр для чисел или количество выводимых символов строки для строк; “ . ” - разделитель; l - означает, что число должно рассматриваться как long или double. Могут использоваться следующие спецификации типов :
d,i - для данных типа int;
u - для данных типа unsigned;
o - для данных типа unsigned (выводятся в восьмеричном виде);
x,X - для данных типа unsigned (выводятся в шестнадцатеричном виде), шестнадцатеричные цифры A,B,C,D,E,F изображаются большими буквами при использовании типа X и малыми буквами при использовании x;
c - для данных типа char, unsigned char (выводятся в символьном виде);
f - для данных типа float,double (выводятся в виде с фиксированной точкой, по умолчанию выводится 6 дробных цифр);
e,E - для данных типа float,double (выводятся в виде с плавающей точкой, по умолчанию выводится 7 цифр мантиссы и две цифры порядка, всего 13 позиций), отличаются изображением буквы E;
g,G - для данных типа float,double - величины 0.0001<|x|<1000000 выводятся в виде с фиксированной точкой с шестью значащими цифрами, другие величины выводятся с плавающей точкой с шестью значащими
цифрами (всего занимают 12 позиций), спецификации g и G различаются только изображением буквы e(E);
s - для строк;
p - для данных типа указатель.
Перед выводом всегда осуществляется преобразование данных к типу, определенному спецификацией, что может приводить к изменению выводимого значения. Программист сам должен заботиться о правильном выборе формата, поскольку компилятор не обращает на это никакого внимания. Несоответствие количества элементов формата и количества выводимых данных также может приводить к неприятным последствиям.
Пример:
#include <stdio.h>
int main (){
FILE *file;
char *fname = "file.txt";
file = fopen(fname,"r");
if(file == 0){ //проверка на успешное открытие файла
printf("не могу открыть файл '%s'",fname);
return 0;
}
char ch;
while((ch = fgetc(file))!=EOF) //читать пока не конец файла
fputc(ch, stdout); //вывод на экран(stdout-поток стандартного вывода, в нашем случае окно консоли)
fclose(file);
return 0;
}