Графическое объяснение

#c #logic

#c #Логические

Вопрос:

 #include <stdio.h>

int main()
{
   int c;  /* Present Character */
   int old_c; /* Previous Character */

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

Я действительно не понимаю, как работает этот код. Это решение для упражнения 1.9 по языку программирования C:

Упражнение 1-9:

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

Язык программирования C 2-е издание,
Б. Керниган и Д. Ричи, Прентис Холл, страница 20.

Итак, вот моя проблема

Например, я ввожу в качестве входных данных : Hello Worldn

'n' это не последний символ? сохранить в old_c : old_c = c;

не мог бы кто-нибудь, пожалуйста, объяснить мне, как работает код, поскольку я действительно хочу изучить язык программирования c и программирование. Я очень новичок;

Комментарии:

1. Не могли бы вы включить текст упражнения в вопрос?

2. Приведенный выше код содержит ошибку, поскольку old_c используется, когда он неинициализирован.

3. Чтобы ответить на часть вопроса, если вы введете Hello Worldn в терминал, n не будет интерпретироваться как отдельный символ новой строки, он будет считан отдельно, поэтому последний символ просто n .

4. Из вашего вопроса неясно, каков результат этой программы и какой результат вы ожидаете. Также не ясно, в чем заключается исходная проблема,

Ответ №1:

Этот код выполняет 9 действий:

  1. Во-первых, он объявляет некоторые переменные c и old_c ,
  2. Затем он считывает ввод с клавиатуры в c .
  3. После этого он проверяет, old_c есть или c нет .
  4. Если это так, он печатает пробел и символ, который был нажат последним.
  5. В противном случае он просто печатает символ, который был нажат последним.
  6. Затем old_c устанавливается в c .
  7. Переходите к 2, пока ввод не будет остановлен (обычно с помощью CTRL D или клавиши Enter)
  8. Затем он загружает возвращаемое значение ( 0 , в данном случае),
  9. и он завершается с этим возвращаемым значением.