Seq.c

от ILuxWiki

Направо към: навигация, търсене


Програма за sequence - последователности.

Във freebsd-то по някаква причина липсва този инструмент. Възможно е да го има в някой порт, но реших 'за спорта' да си го напиша сам. seq

BUGS

  • работи само с int стойности.
  • възможно и други, не е тествана с произволни параметри.

Код: seq.c

#include <stdio.h>
#include <stdlib.h>

void usage()
{
    fprintf(stderr, "Usage: seq LAST\n");
    fprintf(stderr, "  or:  seq FIRST LAST\n");
    fprintf(stderr, "  or:  seq FIRST INCREMENT LAST\n");
    fprintf(stderr, "Print numbers from FIRST to LAST, in steps of INCREMENT.\n");
    exit(1);
}

int a2i(char *ch)
{
    int i;
    if ( !(i = strtol(ch, (char **)NULL, 10)) ) {
        usage();
    }
    return i;
}

void print_seq(int f, int i, int l) {
    while (f <= l) {
        printf("%i\n", f);
        f += i;
    }
}

int main(int argc, char **argv) {
    int c = argc - 1;
    char *bp;
    int first = 1, increment = 1 , last = 0;
    switch (c) {
        case 1:
            last = a2i(argv[1]);
            break;
        case 2:
            first = a2i(argv[1]);
            last = a2i(argv[2]);
            break;
        case 3:
            first = a2i(argv[1]);
            increment = a2i(argv[2]);
            last = a2i(argv[3]);
            break;
        default:
            usage();
            break;
    }
    print_seq(first, increment, last);
    return 0;
}