
Scanf(Управляющая строка, аргумент1, аргумент2,...);
Основное различие двух этих функций заключается в особенностях этого списка. Функция printf() использует в списке аргументов имена переменных, константы и выражения, в то время как функция scanf() – только адресасоответствующихпеременных. Кроме того, в "Управляющей строке" в функции просто перечисляются соответствующие спецификации преобразования, без словесных комментариев!
Необходимо помнить несколько правил:
1.Если вам нужно ввести некоторое значение и присвоить его переменной одного из основных типов, то перед его именем переменной требуется писать символ &(символадресапеременной).
2.Если вы ходите ввести значение строковойпеременной, использовать символ & не нужно.
3. В пределах управляющей строки лучше не использоватьзапятые, символы пробела, \n (новой строки), табуляции и т.д., т.к. они будут интерпретироваться как некий "шаблон".
Примеры:
int a;
float b, c, d[2];
scanf("%f",&b);
scanf("%d%f%f%f", &a, &c, &d[0], &d[1]);
Здесь организован ввод данных (считывание с клавиатуры, преобразование к соответствующему типу и размещение в соответствующей "ячейке" памяти) в вещественную переменную b, в целую переменнуюa, в вещественную переменнуюc, в два элемента вещественного массиваd.
Функция scanf() использует практически тот же набор символов спецификации преобразования, что и функция printf().
Работа с файлами
Файл для нас – это часть памяти для хранения информации, обычно на диске, со своим именем. Язык Си "рассматривает" файл как структуру данных. Эта структура содержится в системном файле stdio.h. Краткое наименование шаблона файла – FILE, которая и будет использоваться далее.
Описание файла:
FILE *переменная;
при этом слово FILE пишется только заглавными буквами.
Открытие файла: функция
переменная = fopen("имя_файла","par");
з
}
"r" – файл нужно считать;
"w"– файл нужно записать; толькомаленькимибуквами!!!
"a" – файл нужно дополнить.
Закрытие файла: функция
fclose(переменная);
Закрытие всех открытых файлов: функция
fcloseall();
Вывод в файл: функция
fprintf(переменная, Управляющая строка, аргумент1, аргумент2,...);
Обратите внимание на то, что первым параметром является переменная, связанная с открытым файлом, а остальные параметры – те же, что и в функции printf().
Чтение из файла: функция
fscanf(переменная, Управляющая строка, аргумент1, аргумент2,...);
Пример:
#include <stdio.h>
main()
{
FILE *fr, *fw; // описание указателей на файлы
char *as; // описание указателя на символьную переменную
int ax;
double bx;
fr = fopen("ish.dat","r"); /*открытие файла с именем ish.dat на чтение (ввод) данных*/
fw = fopen("rez.dat","w"); /*открытие файла с именем rez.dat на запись (вывод) данных*/
fscanf(fr,"%s",as); //чтение строки из файла
fscanf(fr,"%lf%d",&bx, &ax); //чтение двух чисел из файла
fprintf(fw," Считана строка %s и числа %lf, %d\n", as, bx, ax);
//вывод комментария и считанной строки и числовых данных в файл
fclose(fr); // закрытие файлов
fclose(fw);
}
Массивы и операции ввода-вывода
При вводе значений элементов массива наименее удобный способ (но все равно правильный) – это тот, где явно в функции ввода (или вывода) перечисляются все элементы массива:
scanf("%f%f%f%f%f%f",&a[0][0],&a[0][1],&a[0][2],&a[1][0],
&a[1][1],&a[1][2]);
Здесь перечислено всего 6 элементов массива (например, он был описан как float a[2][3]). А если в нем 20 строк и 30 столбцов? Так как нам надо обратиться к КАЖДОМУ элементу массива, т.е. перебрать все сочетания номеров строк и номеров столбцов, то более компактно можно организовать ввод, используя вложенные циклы for:
Пример:
float a[20][30];
int i, j;
for ( i=0; i<20; i++ )
for ( j=0; j<30; j++ )
scanf("%f", &a[i][j]);
Ниже организован ввод с клавиатуры и вывод на экран ста элементов вещественного двумерного массива g.
float g[10][10];
int i, j;
for (i = 0; i < 10; i++)
{
for (j = 0; j < 10; j++)
{
printf("Введите элемент массива %d %d: ", i, j);
scanf("%f",&g[i][j]);
printf("g[%d][%d] = %f\n", i, j, g[i][j]);
}
}