2016-11-25 164 views
-2

我写了这段代码,但情况2和3似乎有问题。正如标题中指出的那样,我认为它与未签名的长操作有关,但我不明白它到底是什么。C scanf无符号长整型值

*编辑的版本(scanf更改)。

#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'使用'%u'和'的scanf( “%U”,&add);' – Danh

+0

落后的goto是邪恶的使用'为(;;)'循环和'return'声明。 – chqrlie

+0

使用'gcc -Wall -W'来启用有用的警告 – chqrlie

回答

2

您没有正确使用scanf。 scanf("%lu", add); 对于"%lu"它期望一个指向unsigned long int的指针,但是你传递的不是一个指针而不是一个无符号的long int。 尝试: scanf("%u", &add); 或更改添加的类型。 我也建议检查scanf的返回值。 见:Value returned by scanf function in c

+0

'%lu'期望指向** unsigned ** long int – Danh

+0

'add'是'unsigned int',使用'%u'而不是'%d' – Danh

+0

'scanf(“%lu”,撤回);' – chqrlie

相关问题