Search code examples
clong-integerunsignedoperation

C scanf unsigned long values


I wrote this piece of code, but cases 2 and 3 seem to have a problem. As noted in the title I think it has to do with unsigned long operations, but I can't understand what it is exactly.

*Edited version (scanf changes).

#include <stdio.h>
int main()
{   
    int pin, inp, count=0;
    unsigned dep=100, add, withdraw;
    start:;
    if (count>0)
    {
        printf("\n");
    }
    printf("Please, input your PIN number:");
    scanf("%i", &pin);
    while (5)
    {
        if (pin==2014)
        {
            printf("To view your deposit, press 1.\n");
            printf("To add money to your deposit, press 2.\n");
            printf("To withdraw money from your deposit, press 3.\n");
            printf("To log off, press 4.\n");
            scanf("%i", &inp);
            switch(inp)
            {
                case 1:
                    printf("The remainder of your deposit is %i.\n\n", dep);
                    break;
                case 2:
                    printf("Enter the amount of money you want to add: ");
                    scanf("%u", add);
                    dep+=add;
                    break;
                case 3:
                    printf("Enter the amount of money you want to withdraw. We would like to remind you that it should be multiple of 20.\n");
                    scanf("%u", withdraw);
                    if(((withdraw)%20==0)&&(withdraw<dep))
                    {
                        dep-=withdraw;
                    }
                    else 
                    {
                        printf("We are sorry, but you either chose an invalid withdraw amount or you tried to withdrw more money than you have deposited.\n");
                    }
                    break;
                case 4:
                    printf("Logging off.\n");
                    goto end;
                    break;

            }   
        }
        else
        {
            printf("You entered an invalid PIN.");
            count++;
            goto start;

        }

    }
    end:;
}

Solution

  • You're not using scanf correctly. scanf("%lu", add); For "%lu" it expects a pointer to an unsigned long int, but what you're passing is not a pointer and not an unsigned long int. Try: scanf("%u", &add); Or change add's type. I'd also recommend checking scanf's returned value. See: Value returned by scanf function in c