Как понять 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;
}

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

  1. В функции digits_count используется цикл while, который выполняется до тех пор, пока *s не станет равным \0 (что означает конец строки) и одновременно выполняется условие !isdigit(*s++) || ++count.
  2. В условии цикла while в функции digits_count проверяется, является ли текущий символ числом (с помощью функции isdigit), и если это так, то увеличивается счетчик count.
  3. Если текущий символ не является числом, то функция isdigit возвращает 0, и условие !isdigit(*s++) || ++count становится истинным, что приводит к увеличению count на единицу.
  4. Цикл while в функции main выполняется до тех пор, пока пользователь не введет пустую строку (что означает конец ввода).
  5. Внутри цикла while в функции main выводится приглашение для ввода строки, затем считывается строка с помощью функции fgets и выводится количество цифр в этой строке с помощью функции digits_count.
  6. В условии цикла while в функции main проверяется, что пользователь не ввел пустую строку (что означает конец ввода).

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

12   голосов , оценка 3.833 из 5