Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.c > #70237

Re: A finalized program

From bartekltg <bartekltg@gmail.com>
Newsgroups comp.lang.c
Subject Re: A finalized program
Date 2015-09-11 14:05 +0200
Organization ATMAN - ATM S.A.
Message-ID <msug1h$5i7$1@node1.news.atman.pl> (permalink)
References <d93ca264-e41a-4f82-8c09-cd87731b2eed@googlegroups.com> <5c4b007c-6413-4168-b27c-c06a5a42f17f@googlegroups.com>

Show all headers | View raw


On 11.09.2015 13:27, Alla _ wrote:
> still a lot to improve (summation, functions (!),

!!! ;-)

> simplification), but here is a better version,
> based on your helpful comments:
>
> #include <stdio.h>
> #include <string.h>
>
> int main(void)
> {
>      char card_number[17];
>      int i, number, digit, sum;
>      int sum1 = 0, sum2 = 0, sum3 = 0;
>
>      printf ("Please, enter your card number:  \n");
>
>      while (!(scanf ("%16[0-9]", card_number) == 1 && getchar() == '\n'))
>      {
>          printf ("This is not a card number; please, try again\n");
>          while (getchar() != '\n');
>      }
>
>      size_t length = strlen(card_number);
>
>      for (i = length - 2; i >= 0; i -= 2)
>      {
>          number = (card_number[i] - '0') * 2;
>
>          if (number >= 0 && number <= 9)
>          {
>             sum1 += number;
>          }
>
>          if (number > 9)
>          {
>             while (number > 0)
>             {
>                   digit = number % 10;
>                   sum2 += digit;
>                   number /= 10;
>             }

Is this loop necessary? The number has only two digits.
              sum += number%10 + number/10;
if (number>9) is also unnecessary, it will work with all numbers<100.

>          }
>      }
>
>      for (i = length - 1; i >= 0; i -= 2)
>      {
>          sum3 += (card_number[i] - '0');
>      }

An alternative (not better just different), all in one loop.

Instead of booth loops:

sum =0;
for (int i=1;i<=lenght;i++)
   sum+= digit_value( card_number[length - i], i );

and before main() we need this:

int digit_value( char c, int index ) {
    int res = (c-'0')*(2-index%2 );
    return res%10 + res/10;
} // (2-index%2 ) equals 1 for odd values of index, and 2 for even.


>      if (sum % 10 == 0)
>      {
>         if (length == 15 && card_number[0] == '3' && (card_number[1] == '4' || card_number[1] == '7'))
>            printf ("AMEX");
>
>         else if (length == 16 && card_number[0] == '5')
>         {
>            if (card_number[1] == '1' || card_number[1] == '2' || card_number[1] == '3' || card_number[1] == '4' || card_number[1] == '5')

if (card_number[1] >= '1' && card_number[1] <= '5')

Or, even better, use an integer to keep whole 'first two digits' number.

bartekltg

Back to comp.lang.c | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread


Thread

A finalized program Alla _ <modelling.data@gmail.com> - 2015-09-08 04:13 -0700
  Re: A finalized program Alla _ <modelling.data@gmail.com> - 2015-09-08 04:19 -0700
    Re: A finalized program fir <profesor.fir@gmail.com> - 2015-09-08 04:30 -0700
    Re: A finalized program Ben Bacarisse <ben.usenet@bsb.me.uk> - 2015-09-08 14:45 +0100
      Re: A finalized program Malcolm McLean <malcolm.mclean5@btinternet.com> - 2015-09-08 08:29 -0700
      Re: A finalized program Malcolm McLean <malcolm.mclean5@btinternet.com> - 2015-09-08 08:52 -0700
        Re: A finalized program Martin Shobe <martin.shobe@yahoo.com> - 2015-09-08 13:01 -0500
        Re: A finalized program Ben Bacarisse <ben.usenet@bsb.me.uk> - 2015-09-08 21:00 +0100
          Re: A finalized program Malcolm McLean <malcolm.mclean5@btinternet.com> - 2015-09-08 13:33 -0700
            Re: A finalized program Ben Bacarisse <ben.usenet@bsb.me.uk> - 2015-09-09 00:28 +0100
  Re: A finalized program Ben Bacarisse <ben.usenet@bsb.me.uk> - 2015-09-08 14:26 +0100
    Re: A finalized program Alla _ <modelling.data@gmail.com> - 2015-09-08 06:42 -0700
      Re: A finalized program Ben Bacarisse <ben.usenet@bsb.me.uk> - 2015-09-08 20:50 +0100
        Re: A finalized program Alla _ <modelling.data@gmail.com> - 2015-09-11 01:47 -0700
  Re: A finalized program jt@toerring.de (Jens Thoms Toerring) - 2015-09-08 13:41 +0000
    Re: A finalized program Alla _ <modelling.data@gmail.com> - 2015-09-10 01:31 -0700
      Re: A finalized program jt@toerring.de (Jens Thoms Toerring) - 2015-09-10 10:39 +0000
        Re: A finalized program David Thompson <dave.thompson2@verizon.net> - 2015-09-20 18:35 -0400
    Re: A finalized program Alla _ <modelling.data@gmail.com> - 2015-09-10 01:33 -0700
    Re: A finalized program Alla _ <modelling.data@gmail.com> - 2015-09-10 10:16 -0700
      Re: A finalized program bartekltg <bartekltg@gmail.com> - 2015-09-10 20:08 +0200
        Re: A finalized program Alla _ <modelling.data@gmail.com> - 2015-09-11 02:05 -0700
          Re: A finalized program Richard Heathfield <rjh@cpax.org.uk> - 2015-09-11 10:17 +0100
            Re: A finalized program Richard Heathfield <rjh@cpax.org.uk> - 2015-09-11 10:19 +0100
            Re: A finalized program Alla _ <modelling.data@gmail.com> - 2015-09-11 02:28 -0700
            Re: A finalized program Alla _ <modelling.data@gmail.com> - 2015-09-11 02:29 -0700
        Re: A finalized program Alla _ <modelling.data@gmail.com> - 2015-09-11 02:19 -0700
          Re: A finalized program Richard Heathfield <rjh@cpax.org.uk> - 2015-09-11 10:23 +0100
            Re: A finalized program Alla _ <modelling.data@gmail.com> - 2015-09-11 02:33 -0700
              Re: A finalized program Keith Thompson <kst-u@mib.org> - 2015-09-11 14:11 -0700
                Re: A finalized program jt@toerring.de (Jens Thoms Toerring) - 2015-09-11 21:39 +0000
          Re: A finalized program bartekltg <bartekltg@gmail.com> - 2015-09-11 12:49 +0200
      Re: A finalized program Richard Heathfield <rjh@cpax.org.uk> - 2015-09-10 23:31 +0100
        Re: A finalized program Alla _ <modelling.data@gmail.com> - 2015-09-11 02:15 -0700
      Re: A finalized program jt@toerring.de (Jens Thoms Toerring) - 2015-09-10 22:37 +0000
        Re: A finalized program Richard Heathfield <rjh@cpax.org.uk> - 2015-09-10 23:47 +0100
          Re: A finalized program jt@toerring.de (Jens Thoms Toerring) - 2015-09-11 10:18 +0000
        Re: A finalized program Alla _ <modelling.data@gmail.com> - 2015-09-11 01:07 -0700
        Re: A finalized program Alla _ <modelling.data@gmail.com> - 2015-09-11 02:14 -0700
          Re: A finalized program jt@toerring.de (Jens Thoms Toerring) - 2015-09-11 10:10 +0000
            Re: A finalized program Alla _ <modelling.data@gmail.com> - 2015-09-11 04:19 -0700
  Re: A finalized program Barry Schwarz <schwarzb@dqel.com> - 2015-09-08 15:53 -0700
  Re: A finalized program Alla _ <modelling.data@gmail.com> - 2015-09-11 04:27 -0700
    Re: A finalized program bartekltg <bartekltg@gmail.com> - 2015-09-11 14:05 +0200
  Re: A finalized program Alla _ <modelling.data@gmail.com> - 2015-09-11 04:42 -0700
    Re: A finalized program bartekltg <bartekltg@gmail.com> - 2015-09-11 14:15 +0200
      Re: A finalized program Alla _ <modelling.data@gmail.com> - 2015-09-11 05:50 -0700
        Re: A finalized program bartekltg <bartekltg@gmail.com> - 2015-09-11 15:00 +0200
      Re: A finalized program Alla _ <modelling.data@gmail.com> - 2015-09-11 05:50 -0700
    Re: A finalized program Ben Bacarisse <ben.usenet@bsb.me.uk> - 2015-09-11 13:46 +0100
      Re: A finalized program Richard Heathfield <rjh@cpax.org.uk> - 2015-09-11 14:19 +0100

csiph-web