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; } } } }
Объяснение кода листинга программы
- Объявлены переменные: — ch типа int, — i типа int, — buf типа char, массив на 10 элементов.
- Переменная i инициализируется значением 0.
- Запускается бесконечный цикл while (1).
- Внутренний цикл while (1) выполняется до тех пор, пока не будет получен символ новой строки или не будет достигнут конец файла.
- В зависимости от значения переменной i, выполняются следующие действия: — Если i равно 0, то в текущую позицию массива buf записывается символ новой строки или 0, и выводится текущая строка, заканчивающаяся символом новой строки. — Если i больше 0, то в текущую позицию массива buf записывается символ, полученный с помощью функции getchar().
- Если получен символ новой строки, то выполняются следующие действия: — Переменная i сбрасывается в 0. — Выводится текущая строка, заканчивающаяся символом новой строки.
- Если достигнут конец файла, то выводится текущая строка, заканчивающаяся символом новой строки, и функция main() возвращает 0, что означает успешный конец работы программы.
- Если получен какой-то другой символ, то он записывается в текущую позицию массива buf, и значение переменной i увеличивается на 1.
- В зависимости от значения переменной i, выполняются следующие действия: — Если i равно 0, то выводится текущая строка, заканчивающаяся символом новой строки. — Если i больше 0, то выводится текущая строка.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д