понедельник, 30 декабря 2013 г.

Упражнение 1.9.

Напишите программу, копирующую символы ввода в выходной поток и заменяющую стоящие подряд пробелы на один пробел.

$ vim space.c

#include <stdio.h>

int main(void)
{
        int c;

        while((c = getchar()) != EOF)
        {
            if (c == ' ')
            {
                putchar(c);
                while((c = getchar()) == ' ')
                    putchar(0);
            }
            putchar(c);
        }
        return 0;
}


$ cc -g -O0 -Wall -o a.out space.c
$ ./a.out
Hello, my friend!
Hello, my friend!
Hello   hello       hello!
Hello hello hello!

4 комментария:

  1. Получилась такая конструкция, но почему-то ctrl-d не брейкает цикл, если он в цикле пропуска пробелов:
    #include

    /* копирование ввода на вывод */
    int main(void)
    {
    int c;
    while ((c = getchar()) != EOF)
    {
    if (c == ' ')
    {
    putchar(c);
    while ((c = getchar()) == ' ')
    ;
    }
    if (c != EOF)
    putchar(c);
    else
    break;
    }

    ОтветитьУдалить
  2. Ответы
    1. зачем ты писал эти строчки
      if (c != EOF)
      putchar(c);
      else
      break;
      }

      ведь ты в начале поставил условие чтобы твой символ не был концом файла? потом заходишь в него , и внутри него опять ставишь условие на конец файла

      Удалить