Вход и изход - 1

Chapter 7 - Input and Output
7.1 Standard Input and Output
7.2 Formatted Output - printf
7.3 Variable-length Argument Lists
7.4 Formatted Input - Scanf
7.5 File Access

Стандартен вход и изход
Четене на знак (символ)
int getchar(void)
ebook - The C Programming Language Ritchie & kernighan -.doc
Пренасочване на входа
prog <infile
ebook - The C Programming Language Ritchie & kernighan -.doc
Каскада (pipe) - изходът от една програма служи за вход на друга програма
otherprog | prog
ebook - The C Programming Language Ritchie & kernighan -.doc
Писане на знак (символ)
int putchar(int)
ebook - The C Programming Language Ritchie & kernighan -.doc
Пренасочване на изхода
prog >outfile
ebook - The C Programming Language Ritchie & kernighan -.doc

#include <stdio.h>
#include <ctype.h>

int main() /* lower: convert input to lower case*/
{

    int c
    while ((c = getchar()) != EOF)
        putchar(tolower(c));

    return 0;
}


Форматиран изход - printf

int printf(char *format, arg1, arg2, ...);

int sprintf(char *string, char *format, arg1, arg2, ...);


Форматиран вход - scanf

int scanf(char *format, ...)
int sscanf(char *string, char *format, arg1, arg2, ...)


Пример:
#include <stdio.h>

int main() /* rudimentary calculator */
{

    double sum, v;
    sum = 0;
    while (scanf("%lf", &v) == 1)
        printf("\t%.2f\n", sum += v);
    return 0;

}



ebook - The C Programming Language Ritchie & kernighan -.doc 25 Dec 1988
int day, year;
char monthname[20];
scanf("%d %s %d", &day, monthname, &year);



Достъп до файлове

Дефиниране на файлова променлива:
FILE *fp;

Функция за отваряне на файл:
FILE *fopen(char *name, char *mode);

Отваряне на файл:
fp = fopen(name, mode);

Четене и писане на един знак (символ) от и във файл:
int getc(FILE *fp);
int putc(int c, FILE *fp);


Форматирано четене и писане от и във файл:
int fscanf(FILE *fp, char *format, ...)
int fprintf(FILE *fp, char *format, ...)


Затваряне ня файл:
int fclose(FILE *fp)

Пример:
Програма за обединение на файлове, подобна на cat:
#include <stdio.h>

/* cat: concatenate files, version 1 */
int main(int argc, char *argv[])
{
    FILE *fp;
    void filecopy(FILE *, FILE *);
    if (argc == 1) /* no args; copy standard input */
        filecopy(stdin, stdout);

    else
        while(--argc > 0)
            if ((fp = fopen(*++argv, "r")) == NULL) {
                printf("cat: can't open %s\n, *argv);
                return 1;

            }
            else {

                filecopy(fp, stdout);
                fclose(fp);

            }
    return 0;

}

/* filecopy: copy file ifp to file ofp */
void filecopy(FILE *ifp, FILE *ofp)

{
    int c;
    while ((c = getc(ifp)) != EOF)
        putc(c, ofp);
}