【问题标题】:my program does not continue compiling if I don't type any letter如果我不输入任何字母,我的程序不会继续编译
【发布时间】:2021-07-27 01:13:09
【问题描述】:

我正在解决cs50中的set1_ credit问题。程序可以正常工作,但是在输入信用卡号码后,我需要在键盘上输入任何字母才能让程序给我答案。 这是我的代码

# include <cs50.h>
# include <stdio.h>
# include <math.h>


long credit(void);


int main(void)
{
     long long  num = credit();
     long long  num2 = num;
     int c = log10(num), i, sum , sum1, sum2 = 0, digits[c], divid[c], remind[c], total[c], cards[c];
     scanf("%d", &c);
     for ( i = 0; i <= c ; i++)
     {

          digits[c-i] =  num % 10;
          num = num /10;
          scanf("%d", &digits[c-i]);

     }

     if ( c % 2 != 0)

      {
           for ( i = 0 ; i <= c ; i++)
          {

                    if (  i % 2 == 0 )
                    {
                        digits[i] = digits [i] * 2;

                    }

                    else
                    {
                         digits[i] = digits [i];

                    }


          }
      }

      else
      {
           for ( i= 0 ; i <= c ; i++)
           {

                   if ( i % 2 != 0)
                   {
                    digits [i] = digits[i] * 2;

                   }

                   else
                   {
                        digits[i] = digits[i];

                   }


           }
      }

     for (  i = 0; i <= c; i++ )
     {
       remind[i] = digits[i] % 10;
       
     }
     //printf("\n");


     for (i = 0; i <= c; i++)
     {
         divid[i] = digits[i] / 10;
        
     }
     

     for ( i = 0; i <= c; i++ )
     {
           total[i]  = remind[i] + divid[i];
          
     }
      


     for ( i = 0; i <= c ; i++ )
     {
          sum = sum + total[i];

     }
        

 // recreate the card's number in a form of an array

 for ( i = 0; i <= c ; i++)
     {
          cards[c-i] =  num2 % 10;
          num2 = num2 /10;
          scanf("%d", &cards[c-i]);
     }
    
 // check the nature and the validity of a card

      int cards1 = cards[1];
  

 if  (sum % 10 == 0 && cards[0] == 3)
 {
     if (c == 15 )
     {
     switch (cards [1])
     {
         case 4: printf("AMEX");
         break;
         case 7: printf("AMEX");
         break;
     }
     }
     //return 0;
    printf("AMEX");
 }

 else if (cards[0] == 5 && sum % 10 == 0)
 {
     if (c == 16)
     {
     switch (cards [1])
     {
         case 1: printf("MASTERCARD");
         break;
         case 2: printf("MASTERCARD");
         break;
         case 3: printf("MASTERCARD");
         break;
         case 4: printf("MASTERCARD");
         break;
         case 5: printf("MASTERCARD");
         break;
    }
    }
    //return 0;
    printf("MASTERCARD\n");
 }

else if (cards[0] == 4 && sum % 10 == 0)
{
     switch (c)
     {
         case 13: //printf("VISA\n");
          break;
         case 16: //printf("VISA\n");
          break;

     }
      printf("VISA\n");

}

 else
 {
     printf("INVALID\n");
 }
  printf("\n");




}


// get number of digits of an integer

  long  credit(void)
  {
      long long  n;
      do
      {

          n = get_long_long("Number: ");

       }
       while (log10(n)  < 12 || log10(n) > 16);

       return n;
  }

如果有人能帮我解决这个问题,我将不胜感激。

提前致谢。

【问题讨论】:

    标签: cs50 credit-card


    【解决方案1】:

    来自man scanf

    scanf()函数从标准输入流stdin

    中读取输入

    程序正在几个scanf 命令之一等待键盘输入 (stdin)。

    NB 这个问题描述具有误导性,因为程序确实编译,它(似乎)停止运行直到键盘输入。

    【讨论】:

    • 您有什么建议可以阻止输入以使程序继续运行
    • 我没有研究程序,不明白scanf的目的。程序需要的唯一输入是信用卡号。一眼看去,scanf 看起来没有必要。 “set” (=) 看起来就足够了。
    猜你喜欢
    • 1970-01-01
    • 2013-10-11
    • 2023-02-23
    • 1970-01-01
    • 1970-01-01
    • 2014-04-03
    • 2019-03-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多