Тандартне введеннЯ/виведеннЯ

Џри запуску будь-Яко» програми автоматично вґдкриваютьсЯ вґдразу три файла:

- файл стандартного вводу. ‰ого вказґвник назива№тьсЯ stdin;

- файл стандартного виводу. ‰ого вказґвник назива№тьсЯ stdout;

- файл стандартного виводу помилок. ‰ого вказґвник назива№тьсЯ stderr.

Џри роботґ з файлами ми можемо використовувати цґ вказґвники, щоб направлЯти данґ в стандартнґ потоки, в Яких за замовчуваннЯм введеннЯ йде з клавґатури, а виведеннЯ - на екран. Ќаприклад, щоб ввести рЯдок з клавґатури, можна застосувати функцґю fgets () у виглЯдґ:

fgets(s, maxline, stdin);

а длЯ виведеннЯ рЯдка на экран С функцию fputs() у виглЯдґ:

fputs(s, stdout);

‡ наведеного ранґше перелґку функцґй, обслуговуючих введеннЯ/виведеннЯ, ми бачили, що ґснують функцґ» getc (fp), putc (c, fp), Якґ вґдповґдно вводЯть один символ з файлу з вказґвником fp ґ пишуть один символ в файл з вказґвником fp. џкщо замґсть вказґвника fp, Який ма№ тип FILE, в цґ функцґ» помґстити вказґвники стандартного потоку, то вони стануть вґдповґдно вводити один символ з клавґатури ґ виводити його на екран. ‚иЯвлЯ№тьсЯ, що ранґше застосовуванґ нами в прикладах функцґ» getchar (), putchar () пов'Язанґ в файлґ stdio.h зґ стандартними потоками наступним чином:

#define getchar() getc(stdin)

#define putchar() putc(stdout)

’ому, пґдключивши файл stdio.h до сво№» програми, ми спокґйно працювали з цими функцґЯми, а фактично - з символьними константами.

“ мовґ ‘ стандартний ввґд можна перенаправлЯти на введеннЯ з файлу (ранґше ми бачили, що це може робити функцґЯ freopen ()): Якщо деЯка програма з ґм'Ям p1.exe використову№ функцґю getchar (), то за допомогою виконаннЯ командного рЯдка:

p1.exe < anyFILE1

ми отрима№мо введеннЯ не з клавґатури, а з файлу anyFILE1. Љомандний рЯдок в ‘ можна виконати за допомогою системно» функцґ» system () у виглЯдґ:

system("P1.EXE < ANYFILE1");

Џричому символи повиннґ бути в верхньому регґстрґ, так Як викону№тьсЯ команда DOS. ’очно так само, Як ґ длЯ введеннЯ, можна перенаправити стандартний вивґд у файл. џкщо ма№мо програму p2.exe, Яка використову№ стандартне виведеннЯ, то за допомогою виконаннЯ командного рЯдка:

p2.exe > anyFILE2

ми отрима№мо виведеннЯ у файл anyFILE2.

Риклади програм перенаправленнЯ введеннЯ/виведеннЯ

Ќаведемо приклади програм перенаправленнЯ введеннЯ/виведеннЯ. ’аких програм буде двґ: одна - викликане, в Якґй буде вґдбуватисЯ стандартний ввґд / вивґд, а друга - зухвала, Яка буде запускати першу з перенаправленнЯм вводу / виводу.

‚иклика№тьсЯ програма, Яка вводить данґ з клавґатури ґ виводить результат на екран, приведена в лґстингу 3.

Истинг 3

//--------------------------------------------------------------------

# pragma hdrstop

# include <stdio.h>

# include <conio.h>

# define eof 10

/* ’ут введено ознака кґнцЯ файлу: код 10 через правий <Alt> +10 на правґй клавґатурґ. Љод 27 (клавґша <Esc>) вводити не можна: Якщо застосувати зухвалу програму, Яка за допомогою функцґ» system () буде перенаправлЯти ввґд / вивґд, то зухвала програма, зависне. Љодом 10 (натисканнЯм <Enter>) треба завершувати файл, з Якого будуть братисЯ данґ длЯ введеннЯ, виходЯчи ґз специфґки роботи функцґ» getchar () */

# define no 0

# define yes 1

// ------------------------------------------------ --------------------

int main () {

int i = 0;

char m [1000];

/* Џґдрахунок кґлькостґ символґв, слґв ґ рЯдкґв, введених з клавґатури */

int c;

int nc, nl, nw, in;

nc = nl = nw = 0;

in = no;

while ((c = getchar ())! = eof)

/* EOF визначений у бґблґотецґ stdio.h Як # define EOF -1 */ {

m [i] = c;

i++;

m [i] = '\0';

nc++;

if (c == '\ n')

nl + +;

if (c == '' || c == '\n' || c == '\t')

in = no; // перебува№мо поза слова

else if (in == no) // потраплЯ№мо в слово ґ зарахову№мо його {

in = yes;

nw + +;

}

} // While

printf ("Entered from FILE =% s \ n", m);

printf ("Strings .... =%d \n", nl);

printf ("Words ...... =%d \n", nw);

printf ("Charecters. =%d \n", nc);

getch ();

}

‚икликаюча програма, що перенаправлЯ№ стандартне введеннЯ/виведеннЯ, наведена у лґстингу 4.

Истинг 4

/ / ------------------------------------------------ --------------------

# include <stdio.h>

# include <stdlib.h> // длЯ system ()

# include <conio.h> // длЯ getch ()

# pragma hdrstop

/ / ------------------------------------------------ --------------------

# pragma argsused

int main (int argc, char * argv []) {

/* Џрограма PROJECT3_INPOUTREDIRECT.EXE почне виконуватисЯ ґ вводити данґ з файлу PEREVIRKA.TXT */

system ("PROJECT3_INPOUTREDIRECT.EXE < PEREVIRKA.TXT");

/* Џрограма PROJECT3_INPOUTREDIRECT.EXE почне виконуватисЯ ґ виводити результати в файл PEREVIRKA1.TXT. ’ут введеннЯ очґкуватиметьсЯ з клавґатури, оскґльки перенаправленнЯ вводу дґЯло тґльки в межах першого виконаннЯ функцґ» system () */

system ("PROJECT3_INPOUTREDIRECT.EXE> PEREVIRKA1.TXT");

getch ();

}

ђезультат роботи програми показаний на рис. 1.

 

ђис. 1. ђезультат роботи програми по перенаправленню введеннЯ/виведеннЯ