Как печатать каждую секунду di git in C - PullRequest
0 голосов
/ 20 июня 2020

Моя задача - каждую секунду выводить di git заданного long в C. Мой код выглядит так:

long credit;
int mod, mod1, var;

int main(void)
{
    credit = get_long("n: \n");
    for (mod = -1; credit > 0; credit /= 10)
    {
        mod = credit % 10;
        for(mod1 = 1; mod1 <= mod; mod1+=2)
        {
            for (var = 1; var <= mod1; var++)
            {
                if(var == mod)
                {
                    printf("%i ", var);
                }
             }
         }
     }
     return 0;
} 

К сожалению, он печатает только нечетные числа из заданного long. Неважно, сколько четных чисел между ними. Интересно, является ли выбранный мной способ (вложение для циклов + оператор if) правильным способом сделать это.

ПРИМЕЧАНИЕ: Я не ищу готового решения. Я ищу подсказки, так как хотел бы найти решение самостоятельно.

Ответы [ 2 ]

1 голос
/ 20 июня 2020

ну, вы можете получить последний di git, взяв по модулю 10, а затем вы можете избавиться от 2 цифр, разделив число на 100, и если вы сделаете это, пока число не станет равным 0, вы получите каждую секунду di git, вот так:

x /= 10; //just offsetting it by one more digit (so you get even and not odd numbers)

while(x > 0)
{
    printf("%lld", x % 10);
    x /= 100;
}
0 голосов
/ 27 июня 2020

Следующий код решит проблему без большого количества циклов.

#include <stdio.h>

#define BASE (10) /* fits any base between 2 and 16 */

#ifndef EVENS
#define EVENS 0
#endif

char *print_each_2nd(
        unsigned x,  /* value to extract digits. */
        char *buf,   /* buffer to use as workpad */
        size_t sz)   /* size of previous buffer  */
{
    buf += sz; /* we go backwards, from the end of the buffer */
    while (x) {
        int remainder = x % (BASE*BASE); 
        
        if (!sz) {
            fprintf(stderr,
                    "Not enough buffer space\n");
            return NULL;
        }
#if EVENS
        remainder /= BASE;
#endif
        *--buf = "0123456789abcdef"[remainder % BASE];
        sz--;

        x /= BASE*BASE;
    }
    return buf;
} /* print_each_2nd */

int main()
{
    char workpad[20];

    unsigned number = 123456789;
    printf("original: %d, alternates: %s\n", 
           number,
           print_each_2nd(number, 
                   workpad, sizeof workpad));
} /* main */

Это полный пример, который вы можете построить и протестировать.

...