Ввод-вывод в Си

Язык Си / Ввод-вывод в Си

 

Основной задачей программирования является обработка информации,
поэтому любой язык программирования имеет средства для ввода и вывода информации. В языке Си нет операторов ввода-вывода.

Ввод и вывод информации осуществляется через функции стандартной библиотеки. Прототипы рассматриваемых функций находятся в файле stdio.h. Эта библиотека содержит функции

  • printf() — для вывода информации
  • scanf() — для ввода информации.

 

Вывод информации

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

Общая форма записи функции printf():

 
printf("СтрокаФорматов", объект1, объект2, ..., объектn);


СтрокаФорматов состоит из следующих элементов:

  • управляющих символов;
  • текста, представленного для непосредственного вывода;
  • форматов, предназначенных для вывода значений переменных различных типов.

Объекты могут отсутствовать.

Управляющие символы не выводятся на экран, а управляют расположением выводимых символов. Отличительной чертой управляющего символа является наличие обратного слэша ‘\’ перед ним.

Основные управляющие символы:

  • ‘\n’ — перевод строки;
  • ‘\t’ — горизонтальная табуляция;
  • ‘\v’ — вертикальная табуляция;
  • ‘\b’ — возврат на символ;
  • ‘\r’ — возврат на начало строки;
  • ‘\a’ — звуковой сигнал.

 
Форматы нужны для того, чтобы указывать вид, в котором информация будет выведена на экран. Отличительной чертой формата является наличие символа процент ‘%’ перед ним:

  • %d — целое число типа int со знаком в десятичной системе счисления;
  • %u — целое число типа unsigned int;
  • %x — целое число типа int со знаком в шестнадцатеричной системе счисления;
  • %o — целое число типа int со знаком в восьмеричной системе счисления;
  • %hd — целое число типа short со знаком в десятичной системе счисления;
  • %hu — целое число типа unsigned short;
  • %hx — целое число типа short со знаком в шестнадцатеричной системе счисления;
  • %ld — целое число типа long int со знаком в десятичной системе счисления;
  • %lu — целое число типа unsigned long int;
  • %lx — целое число типа long int со знаком в шестнадцатеричной системе счисления;
  • %f — вещественный формат (числа с плавающей точкой типа float);
  • %lf — вещественный формат двойной точности (числа с плавающей точкой типа double);
  • %e — вещественный формат в экспоненциальной форме (числа с плавающей точкой типа float в экспоненциальной форме);
  • %c — символьный формат;
  • %s — строковый формат.

 
Пример на Си

1
2
3
4
5
6
7
8
9
10
#include <stdio.h>
int main()
{
  int a = 5;
  float x = 2.78;
  printf("a=%d\n", a);
  printf("x=%f\n", x);
  getchar(); getchar();
  return 0;
}

Результат работы программы
Вывод в Си

При указании формата можно явным образом указать общее количество знакомест и количество знакомест, занимаемых дробной частью:

1
2
3
4
5
6
7
8
#include <stdio.h>
int main()
{
  float x = 1.2345;
  printf("x=%10.5f\n", x);
  getchar(); getchar();
  return 0;
}

Результат выполнения
Форматированный вывод в Си

В приведенном примере 10 — общее количество знакомест под значение переменной; 5 — количество позиций после десятичной точки. В указанном примере количество знакомест в выводимом числе меньше 10, поэтому свободные знакоместа слева от числа заполняются пробелами. Такой способ форматирования часто используется для построения таблиц.

Вывод числа с указанием количества знакомест

Ввод информации

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

 
scanf ("CтрокаФорматов", адрес1, адрес2,...);


Строка форматов аналогична функции printf().
Для формирования адреса переменной используется символ амперсанд ‘&’:
адрес = &объект

Строка форматов и список аргументов для функции обязательны.

Пример на Си
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#define _CRT_SECURE_NO_WARNINGS // для возможности использования scanf
#include <stdio.h>
#include <stdlib.h> // для перехода на русский язык
int main()
{
  float y;
  system("chcp 1251"); // переходим в консоли на русский язык
  system("cls");       // очищаем окно консоли
  printf("Введите y: "); // выводим сообщение
  scanf("%f", &y);     // вводим значения переменной y
  printf("Значение переменной y=%f", y); // выводим значение переменной y
  getchar(); getchar();
  return 0;
}

Результат работы программы:
Функция scanf()


Назад: Язык Си

Комментариев к записи: 11

  • опечатка- формат не задан. нет f после y=%10.5

    Пример
    float y=1.2345;printf(«\n Значение переменной y=%10.5\n», y);



    • Елена Вставская

      \t — горизонтальная табуляция — отступ, чтобы при выводе значений в несколько столбиков они выводились друг под другом.
      \v — вертикальная табуляция — переводит курсор на следующую строку и начинает вывод не с начала строки, а с текущей позиции, но в некоторых случаях срабатывает некорректно.
      \a — звуковой сигнал, который слышен при «выводе на печать» этого символа.



  • Правильно ли я поняла, что для ввода 4-х значного целого числа можно использовать формат %4d , т.е  scanf("%4d", &y) ?


    • Елена Вставская

      От некорректного ввода никто не застрахован, поэтому количество цифр при вводе указывать бессмысленно. Эти форматы влияют только на вывод.



  • георгий

    подпрограмма для вывода на экран натуральных чисел из текстового файла целых чисел в 16-ричном виде. Функцию scanf не использовать. помогите решить


    • Елена Вставская

      Функцию scanf для вывода в любом случае использовать не получится 🙂
      В чём будет заключаться помощь?


  • Константин

    Не работает scanf на С.После ввода первой переменной с клавиатуры программа или завершает работу, или выводит некорректно посчитанные результаты бесконечно. Компилятор MinGW. Прилагаю код

    #define _CRT_SECURE_NO_WARNINGS // для возможности использования scanf
    #include
    #include
    #include

    int main (void) {
    char *locale = setlocale (LC_ALL, «»);
    double a, b, xk, xn, deltax, y, sum, x;
    printf(«Введите число a: \r\n»);
    scanf( «%.1lf», &a);
    printf(«Введите число b: \r\n»);
    scanf(«%.1lf», &b);
    printf («Введите число xn: \r\n «);
    scanf(«%.1lf», &xn);
    printf(«Введите число xk: \r\n»);
    scanf(«%.1lf», &xk);
    printf(«Введите число dx: \r\n»);
    scanf(«%.2lf», &deltax);
    printf («\r\n»);
    x = xn;
    y = 0.0;
    while (x>=xn & x<=xk){
    if (xb){
    y = pow(fabs((pow(x,2)-a*exp((x-b)))),(1/3.0));

    printf(«При х = %.2lf», x);
    printf( » y =%lf», y);
    printf(«\r\n»);
    };
    if (x>a & x<=6){
    sum = 0.0;
    int k;
    for (k =5;k<=12;k++){
    sum = sum + (sqrt(k) +x)/log(k);
    };
    y = sum;

    printf("При х = %.2lf", x);
    printf( " y =%lf", y);
    printf("\r\n");
    };

    x+=deltax;

    };
    return 0;
    }


Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *