2016-11-25 11 views
-2

Ich habe diesen Code geschrieben, aber die Fälle 2 und 3 scheinen ein Problem zu haben. Wie im Titel erwähnt, denke ich, dass es mit unsignierten langen Operationen zu tun hat, aber ich kann nicht verstehen, was genau es ist.C scanf unsigned long Werte

* Editierte Version (scanf Änderungen).

#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:; 
} 
+1

'unsigned' Verwendung'% U' und 'scanf ("% u", &add);' – Danh

+0

rückwärts gotos Übel sind verwendet ein 'for (;;)' Schleife und eine 'return' Aussage. – chqrlie

+0

Verwenden Sie 'gcc -Wall -W ', um nützliche Warnungen zu aktivieren. – chqrlie

Antwort

2

Sie verwenden scanf nicht korrekt. scanf("%lu", add); Für "%lu" erwartet es einen Zeiger auf einen vorzeichenlosen langen int, aber was Sie übergeben, ist kein Zeiger und kein vorzeichenloser langer int. Versuchen Sie: scanf("%u", &add); Oder ändern Sie den Typ add. Ich würde auch empfehlen, den zurückgegebenen Wert von scanf zu überprüfen. See. Value returned by scanf function in c

+0

'% lu' erwartet einen Zeiger auf ** unsigned ** long int – Danh

+0

' add' ist ein 'unsigned int', benutze'% u' anstelle von '% d' – Danh

+0

Gleiches Problem für' scanf ("% lu", zurückziehen); ' – chqrlie

Verwandte Themen