Skip to content

Latest commit

 

History

History
99 lines (85 loc) · 2.91 KB

README.md

File metadata and controls

99 lines (85 loc) · 2.91 KB

Ввод и Вывод

Копирование файла

#include <stdio.h>

int main()
{
    int c;
    c = getchar();
    while (c != EOF) {
        putchar (c);
        c = getchar();
    }
}

Чтобы завершить выполнение приложения, которое читает символы с клавиатуры до тех пор, пока не встретит EOF, можно использовать комбинацию клавиш, которая сигнализирует об окончании ввода.

На разных системах это делается следующим образом:

  • В Unix/Linux и macOS: нажмите комбинацию клавиш Ctrl + D после ввода текста. Это сигнализирует об окончании ввода (EOF).
  • В Windows: используйте комбинацию Ctrl + Z, а затем нажмите Enter.

NB: Дело в том, что терминал накапливает введенные символы в буфер, прежде чем они будут отправлены программе. Когда вы нажимаете Enter, буфер передается программе, и она начинает обработку. При этом ваш ввод выводится сначала самой оболочкой (терминалом), а затем программа еще раз выводит то же самое, поскольку она выводит каждый символ, который считала из буфера.

#include <stdio.h>
/* копирование ввода на вывод; 2-я версия */
int main ()
{
    int с;
    while ((с = getchar()) != EOF)
        putchar (c);
}
#include <stdio.h>

int main()
{
    int a;
    printf("%d", a=10);
}

Упражнение 1.7. Напишите программу, печатающую значение EOF.

Подсчет символов

int main ()
{
    long nc;
    nc = 0;
    while (getchar() != EOF)
        ++nc;
    printf ("%ld\n", nc);
}
#include <stdio.h>
/* подсчет вводимых символов; 2-я версия */
int main()
{
    double nc;
    for (nc = 0; getchar() != EOF; ++nc)
        ;
    printf ("%.0f\n", nc);
}
#include <stdio.h>
#define IN 1 /* внутри слова */
#define OUT 0 /* вне слова */
/* подсчет строк, слов и символов */
int main ()
{
    int c, nl, nw, nc, state;
    state = OUT;
    nl = nw = nc = 0;
    while ((c = getchar()) != EOF) {
        ++nc;
        if (c == '\n' )
            ++nl;
        if (c == " " || c == '\n' || c == '\t')
            state = OUT;
        else if (state == OUT) {
            state = IN;
            ++nw; 
        }
        printf ("nl:%d\tnw:%d\tnc:%d\n", nl, nw, nc);
    }
}

Упражнение: найти 2 ошибки