Как понять while(*s)? - C (СИ)
Формулировка задачи:
char s[256]; do { ... } while(*s);
Решение задачи: «Как понять while(*s)?»
textual
Листинг программы
#include <stdio.h> #include <ctype.h> size_t digits_count(const char * s) { size_t count = 0; while ( *s && ( !isdigit(*s++) || ++count ) ) ; return count; } int main(void) { char buf[BUFSIZ]; while ( printf("String: ") && fgets(buf, BUFSIZ, stdin) && *buf != '\n' ) printf("%u digits\n", digits_count(buf)); return 0; }
Объяснение кода листинга программы
- В функции
digits_count
используется циклwhile
, который выполняется до тех пор, пока*s
не станет равным\0
(что означает конец строки) и одновременно выполняется условие!isdigit(*s++) || ++count
. - В условии цикла
while
в функцииdigits_count
проверяется, является ли текущий символ числом (с помощью функцииisdigit
), и если это так, то увеличивается счетчикcount
. - Если текущий символ не является числом, то функция
isdigit
возвращает0
, и условие!isdigit(*s++) || ++count
становится истинным, что приводит к увеличениюcount
на единицу. - Цикл
while
в функцииmain
выполняется до тех пор, пока пользователь не введет пустую строку (что означает конец ввода). - Внутри цикла
while
в функцииmain
выводится приглашение для ввода строки, затем считывается строка с помощью функцииfgets
и выводится количество цифр в этой строке с помощью функцииdigits_count
. - В условии цикла
while
в функцииmain
проверяется, что пользователь не ввел пустую строку (что означает конец ввода).