C установка IDE C структура програми C змінні C типи даних С функція printf C константи C арифметичні операції C операції порівняння і логічні операції C порозрядні операції C операції присвоювання C перетворення типів C умовні конструкції C цикли С масиви і рядки С функція scanf C препроцесор. Директива #include C #define директива C макроси C умовна компіляція C функції. Визначення та опис функцій C функції. Передача параметрів в функцію C функції. Повернення результату з функції C функції. Рекурсивні функції C область видимості змінних C зовнішні об'єкти C вказівники C вказівник. Операції з вказівниками C покажчики. Арифметика покажчиків C покажчики. Константи і покажчики C покажчики. Покажчики та масиви C покажчики. Масиви покажчиків, рядки і багаторівнева адресація C покажчики. Покажчики в параметрах функції C покажчики. Динамічна пам'ять C покажчики. Покажчик як результат функції C покажчики. Управління динамічної пам'яттю C покажчики. Покажчики на функцію C покажчики. Покажчики на функції як параметри і результати функцій C покажчики. Функції зі змінною кількістю параметрів C struct. Визначення структур C struct. Структури як елементи структур C struct. Покажчики на структури C struct. Масиви структур C struct. Структури і функції C struct. union об'єднання C struct. Бітові поля С file. Введення-виведення і робота з файлами C file. Читання і запис бінарних файлів C file. Читання і запис структур в файл C file. Читання і запис текстових файлів C file. Форматування вводу-виводу C file. Позиціонування в потоці C file. Консольне введення-виведення

C file. Консольне введення-виведення


При запуску програми на Сі автоматично відкриваються п'ять потоків, основними з яких є наступні:

  • Стандартний потік введення stdin

  • Стандартний потік виводу stdout

  • Стандартний потік виводу повідомлень про помилки stderr

Стандартний потік введення stdin за замовчуванням відповідає клавіатурі, а потоки stdout і stderr - екрану монітора.

Для управління введенням-виведенням за допомогою цих потоків використовуються ряд функцій:

  • getchar () : введення з клавіатури одного символу

  • putchar () : висновок на консоль одного символу

  • gets () : введення одного рядка

  • puts () : висновок одного рядка на консоль

  • scanf () : введення з форматуванням даних

  • printf () : висновок з форматуванням даних

Функції scanf вже рассматіріваемих раніше, тому подивимося, як застосовувати інші функції.


Введення і виведення символів

Для введення одного символу з клавіатури застосовується функція getchar () , яка має наступний прототип:

int getchar(void);

Як результат функція повертає числовий код введеного символу.

Для виведення окремого символу на консоль призначена функція putchar () з наступним прототипом:

int putchar(int c);

Виведений символ у вигляді числового коду передається в putchar як параметр, він же повертається функцією.

Слід сказати, що насправді функції getchar () і putchar () повноцінними функціями не є, а визначені як макроси в заголовки stdio.h :

#define getchar()   getc(stdin)
#define putchar(c)  putc((c), stdout)

При використанні функції getchar слід враховувати, що при друку тексту за допомогою клавіатури в буфер операційної системи заносяться коди друкованих символів, а самі символи відображаються на екрані. Повчання програмою введеного символу з буфера проводиться за допомогою натискання клавіші Enter.

І якщо буфер операційної системи не порожній, то при виконанні функції getc () вона отримує черговий символ з буфера. Якщо ж буфер порожній, то відбувається читання байта з потоку введення за допомогою системної функції, назва якої залежить від операційної системи.

При цьому при натисканні клавіші Enter, в буфер також міститься код цієї клавіші. Тобто якщо ми введемо один символ і натиснемо на Enter, в буфері виявляться два числових коду - введеного символу і клавіші Enter. І це треба враховувати при роботі з функцією getchar. В частості, розглянемо простий, але показовий приклад:

#include <stdio.h>
 
int main(void)
{
    printf("1");
    getchar(); // ожидание ввода символа
    printf("2");
    getchar(); // ожидание ввода символа
    printf("3");
     
    return 0;
}

Спочатку на екран виводиться цифра 1, після чого функція getchar очікує введення символу. Якщо після введення символу ми натиснемо Enter, то в буфер буде вміщено два числових коду - введеного символу і клавіші Enter. Тому при другому виклику getchar ця функція зчитує байт з буфера - тобто числовий код клавіші Enter.

Наприклад, введемо при першому виклику функції getchar символ "a", а потім Enter:

#include <stdio.h>
 
int main(void)
{
    int c;
     
    while((c=getchar())!=EOF)
    {
        putchar(c);
    }
    return 0;
}

Функція getchar зчитує числовий код символу, який потім виводиться в функції putchar. Для виведення з програми необхідно ввести комбінацію клавіш Ctrl + C.


Введення і виведення рядків

Для введення рядка з клавіатури застосовується функція gets () , яка має наступний прототип:

char *gets(char *s);

Введені дані містяться в масив, на який вказує покажчик * s, який передається в функцію як параметр. При успішному прочитанні рядки функція повертає адресу цього масиву s. А в разі помилки повертається значення NULL .

При введенні символів функція gets () завершує свою роботу при введенні символу '\ n', тобто при натисканні на клавішу Enter. Але замість цього символу в рядок записується нульовий символ '\ 0', який і буде вказувати на завершення рядка.

Для виведення одного рядка на консоль призначена функція puts () з наступним прототипом:

int putchar(char *s);

Як параметр передається покажчик на рядок, а повертається результатом функції є останній виведений символ.

При цьому функція puts () буде виводити символи переданої рядка, поки не дійде до нульового символу '\ 0'. Якщо ж виведений масив символів не містить цього символу, то результат програми невизначений.

Використовуємо функції для введення рядка:

#include <stdio.h>
 
int main(void)
{
    char name[20];
    puts("Enter name:");
     
    gets(name);
    printf("Your name: %s", name);
    return 0;
}

Результат роботи програми:

Введіть ім'я:
Tom
Ваше ім'я: Том 

Наш партнер:
beta test mp3 playlist downloader