Вопрос про while(n-- > 0), что значит n-- > 0 ?? - C (СИ)

  1. Ёлочка.C1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 #include <stdio.h> #include <conio.h> void print_triangle(int n, int shift) { int cnt, i, nblanks; nblanks = 1 + (2 * (n-1)) / 2; cnt = 1; while (n-- > 0) { nblanks--; for (i = 0; i < nblanks + shift; i++) putchar(' '); for (i = 0; i < cnt; i++) putchar('*'); putchar('\n'); cnt += 2; } } int main() { int n, i; printf("enter a number of triangles: "); scanf("%d", &n); if (n < 0) { printf("invalid number!\n"); return 1; } i = 1; while (n-- > 0) print_triangle(++i, n); getch(); return 0;   }В циклах while условие n-->0, что оно обозначает??


textual

Код:

#include <iostream>
 
class Foo
{
public:
    Foo(int foo = 0):
    m_foo(foo)
    {
    }
    
    int get_foo() const
    {
        return m_foo;
    }
    
    Foo operator--(int)
    {
        Foo temp = *this;
        
        --m_foo;
        
        return temp;
    }
    
    operator bool() const
    {
        return m_foo != 3;
    }
    
private:
    int m_foo;
};
 
bool operator>(const Foo& left, int right)
{
    return left.get_foo() > right;
}
 
std::ostream& operator<<(std::ostream& stream, const Foo& foo)
{
    return stream << foo.get_foo();
}
 
int main()
{
    Foo a = 5, b = 5;
    
    while (a-- > 0);
    while (b--);
    
    std::cout << a << std::endl << b << std::endl;
    
    return 0;
}


Похожие ответы
  1. Здравствуйте! Данная "программа" должна обрабатывать числа, расстояние между которыми меньше 5, а также находить среди таких двух чисел самое большее чётное произведение. КОМПИЛИРУЕТСЯ ВСЁ НОРМАЛЬНО, НО ИСПОЛЬНЯТЬ ЭТА ГАДЮКА НИЧО НЕ ХОЧЕТ ИМЕННО В СЛУЧАЕ, КОГДА НА ВХОД ПОСУТПАЕТ БОЛЕЕ 5 ЧИСЕЛ. Т.е. цикл for(i=5;i int main(void) {   char j,c;      int i;      int n;      int a[5];      int x;      int max=-1;           scanf("%d",&n);     for (i=0;i<=4;i++){         scanf("%d",&a[i]);         }     for (i=5;imax )&&  (a[j-1]*a[c]%2 ==0))                     max=a[c]*a[j-1];                                             }                     }                 for (j=0;j<4;j++){             a[j]=a[j+1];         }         a[4]=x;         }      if (max==-1)          printf("-1");     else printf ("%d",max);     getchar();     getchar();     return 0; }Добавлено через 9 минут Тэкс... Счётчик тут должен робить... Тэк... Вывод массива когда у его индекса чото вычитаем тоже работает... Угу... Кажется я как-то выхожу из границ массива, но я в упор не могу разглядеть этого... Так, падажжи еманаДобавлено через 37 секунд лол, разглядеть он не может, у тебя две строки где идут пляски с массивамми, там же очевидно и ошибкаДобавлено через 3 минуты эхх, пойти спать или сожжрать таки хлеб с пащтетом? но тогда изжога будет от паштета с хлебом, я не хочу изжоги, антиацида нет с собой

  1. Помогите составить программу. Задание: создать программу, с помощью которой можно будет задавать строку символов с консоли и которая будет удалять имеющие нечетный номер символы. Что-то типо этого: C1 2 3 4 5 6 7 8 9 10 11 #include #include   Функция() {     Нахождение нечетных символов и их удаление } int main() {     Задание строки из символов }

  1. Всем привет. Недавно начал изучать язык программирования Си и появились трудности с написанием данных программ по задачам: 1.Напишите функцию, которая принимает два входных аргумента и передает вызывающему окружению два результата, первый из которых является произведением аргументов, а второй — их суммой. Поскольку из функции можно непосредственно вернуть только одно значение, придется вернуть второе значение при помощи дополнительного параметра, являющегося указателем или ссылкой.

  1. Точная степень двойки Дано натуральное число N. Выведите слово YES, если число N является точной степенью двойки, или слово NO в противном случае. Операцией возведения в степень пользоваться нельзя! РешениеJava1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 public class Solution {     public static int recursion(double n) {         // Базовый случай         if (n == 1) {             return 1;         } // Базовый случай         else if (n > 1 && n < 2) {             return 0;         } // Шаг рекурсии / рекурсивное условие         else {             return recursion(n / 2);         }     }     public static void main(String[] args) {         double n = 64;         // вызов рекурсивной функции         if (recursion(n) == 1) {             System.out.println("Yes");         } else {             System.out.println("No");         }

  1. Пытаюсь сделать простейший стек, программа сегфолтится при попытке обратиться к функции pop().C1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 #include #define MAX 100   char *myStack[MAX]; int top = 0;   void push(char*); const char* pop(void);   int main(int argc, char **argv) {     push("fff");     printf("%s\n", pop());     return 0; }   void push(char *str) {     if (top < MAX)         myStack[top++] = str; }   const char* pop(void) {     if (top >= 0)         return myStack[top--];     return 0; }Где я ошибаюсь?

  1. в borland С нужно осуществить проверку на ввод, пользователь дожлен ввести число, как проверить ввел позльзователь число или что то другое

  1. Необходимо ввести число в диапазоне от 1 до 8. Правильность ввода числа типа int уже проверена, но как проверить, входит ли введенное число в диапазон? C1 2 3 4 5 6 7 8     printf ("\nВведи положение  -> ");         do         {         res_x=scanf ("%d", &x);             fflush(stdin);             if (res_x!=1) printf("Неправильный ввод, вводи цифры! -> ");                                                }         while (res_x!=1);

  1. Дан текстовый файл, содержащий программу на языке Си. Проверить эту программу на соответствие числа открывающихся и закрывающихся скобок (круглых, квадратных, фигурных и угловых). Как можно прочитать файл, чтобы была возможность проверять является ли текущий символ скобкой или нет? Пишу через построчное чтение, но не уверен, что пишу правильно и подходит ли этот способ вообще, помогитеC1 2 3 4 5 p=fgets(s,80,f);     if(p==NULL)         printf("Файл закончился");     else         printf("Прочитана строка:\n%s",s);

  1. Здравствуйте. Хотелось бы узнать, каким образом я могу оценить сложность этого алгоритма, можно ли его сделать менее трудоемким для компьютера. Спасибо.C1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 #include #include #define LIM 1000   int main(void) {     int num, divisor, i, j, k = 0;;     _Bool prime = true;     int mass[LIM];       printf("Введите число\n");     scanf("%d", &num);       for(divisor = 1, k = 0; divisor <= 3; ++ divisor)     {         if(num > divisor)         {             mass[k] = divisor;             ++k;         }     }       for(divisor = 4; divisor <= num; ++divisor)     {   for(j = 2; j < divisor/2; ++j)         {             if(divisor % j == 0)             {                 prime = false;                 break;             }             else             {                 prime = true;             }         }                   if(prime == true)         {             mass[k] = divisor;             ++k;         }             }     for(i = 0; i < k; ++i)     {         printf("%d\n", mass[i]);     }   }

  1. Подскажите как правильно передать динамический массив в процедуру ,чтобы его можно было там изменить Пробовал сделать так:C1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 #include #include   void f(int **a) {     *a=(int*)realloc(a,1*sizeof(int));     a[0]=6;     return; }   int main() {     int *a=NULL;     printf("%d\n",a);     printf("%d\n",a[0]);     f(&a);     printf("%d\n",a);     printf("%d\n",a[0]);     return 0; }программа Крашится при выводе элементов