K&R 2.2 Напишите цикл, не используя || и && - C (СИ)

Узнай цену своей работы

Формулировка задачи:

эквивалентный этому циклу
for (i = 0; i < lim-1 && (c=getchar()) != '\n' && c != EOF; ++i)
        s[i] = c;
Есть вот такое решение, прошу пояснить некоторые моменты с нулями...
#define lim 80
 
int main()
{
        int i, c;
        char s[lim];
 
        for(i=0; i<lim-1 ? (c=getchar()) != '\n' ? c != EOF : 0 : 0 ; ++i) // не понимаю с нулями манипуляции
                s[i] = c;
        
        return s[i] ^= s[i];
}

Решение задачи: «K&R 2.2 Напишите цикл, не используя || и &&»

textual
Листинг программы
#include <stdio.h>
 
#define SIZE (10)
 
int main(void) {
    int ch, i;
    char buf[SIZE];
    
    i = 0;
    while ( 1 ) {
        switch ( i < SIZE - 1 ) {
            case 0 :
                buf[i] = '\0';
                printf("%s", buf); // ну или что там с полученной строкой делать нужно...
                i = 0;
                break;
            default :
                switch ( ch = getchar() ) {
                    case '\n' :
                        buf[i] = '\0';
                        printf("%s\n", buf);
                        i = 0;
                        break;
                    case EOF :
                        buf[i] = '\0';
                        printf("%s\n", buf);
                        return 0;
                    default :
                        buf[i++] = ch;
                }
        }
    }
}

Объяснение кода листинга программы

  1. Объявлены переменные: — ch типа int, — i типа int, — buf типа char, массив на 10 элементов.
  2. Переменная i инициализируется значением 0.
  3. Запускается бесконечный цикл while (1).
  4. Внутренний цикл while (1) выполняется до тех пор, пока не будет получен символ новой строки или не будет достигнут конец файла.
  5. В зависимости от значения переменной i, выполняются следующие действия: — Если i равно 0, то в текущую позицию массива buf записывается символ новой строки или 0, и выводится текущая строка, заканчивающаяся символом новой строки. — Если i больше 0, то в текущую позицию массива buf записывается символ, полученный с помощью функции getchar().
  6. Если получен символ новой строки, то выполняются следующие действия: — Переменная i сбрасывается в 0. — Выводится текущая строка, заканчивающаяся символом новой строки.
  7. Если достигнут конец файла, то выводится текущая строка, заканчивающаяся символом новой строки, и функция main() возвращает 0, что означает успешный конец работы программы.
  8. Если получен какой-то другой символ, то он записывается в текущую позицию массива buf, и значение переменной i увеличивается на 1.
  9. В зависимости от значения переменной i, выполняются следующие действия: — Если i равно 0, то выводится текущая строка, заканчивающаяся символом новой строки. — Если i больше 0, то выводится текущая строка.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 4.083 из 5
Похожие ответы