#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 ошибки