微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

cs50 信用卡公司的信用问题

如何解决cs50 信用卡公司的信用问题

我对编程完全陌生,本周一直在研究 pset1,但事实证明信用有点困难。我已经设法让校验和正常工作,但我很难确定卡属于哪家公司,代码的最后一部分似乎每次尝试修复它时都会引入更多错误。如果有人能指出我正确的方向,我将不胜感激。

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

int main (void)
{

  long long ccnumber;

  do
  {
    ccnumber = get_long_long("Credit card number: ");
  }
  while (ccnumber < 0);

  long long cc = ccnumber;
  int s1;
 
  while (cc > 0)
  {
     int l1 = cc % 10;
     s1 = s1 + l1;
     cc = cc / 100;
  }  
 
  cc = ccnumber / 10;
  int s2; 
   
  while (cc > 0)
  {   
    int l1 = cc % 10;
    l1 = l1 * 2;
    if (l1 > 9) l1 = l1 % 10 + l1 / 10;
    s2 = s2 + l1;
    cc = cc / 100;
  }

  int s3 = s1 + s2;
  if (s3 % 10 == 0)
  s3 = true;
   
  long long n = ccnumber;
  int count = 0;
  while (n != 0) 
  {
    n /= 10;    
    ++count;
  }

  int twonumbers = ccnumber;

  while(twonumbers >= 100)
  {
    twonumbers = twonumbers / 10;
  }

  int firstnumber = ccnumber;

  while(firstnumber >= 10)
  {
    firstnumber = firstnumber / 10;
  }

  if (twonumbers == 34 || 37 && (count == 15 ))
    printf("AMERICAN EXPRESS\n");
  else if (twonumbers == 51 || 52 || 53 || 54 | 55 && (count == 16 ))
    printf("MASTER CARD\n");
  else if (firstnumber == 4 && (count == 13 || 16 ))
    printf("VISA\n");
  else
    printf("INVALID\n");
}

解决方法

如果语句不正确,您的结尾:

if (twonumbers == 34 || 37 && (count == 15 ))
...

应该

if ((twonumbers == 34 || twonumbers == 37) && (count == 15 ))

对于每个 if 语句都一样 - 您必须重复每个 or 语句的比较内容,否则编译器将假定为“真”,因为在这种情况下,37 不等于 0。

不是,您也可以比较范围:

else if (twonumbers >= 51 && twonumbers <= 55 && count == 16)

注意我还在最后一次比较时更正了一个二进制或那里(你只有 1 | 而不是 2 ||)

最后一个

else if (firstnumber == 4 && (count == 13 || count == 16 ))

我也有疑问:

int s3 = s1 + s2;
if (s3 % 10 == 0)
  s3 = true;

正在这样做,因为这在 C 意义上实际上总是“真实”,但实际上,您实际上并没有在任何地方使用 s3 所以我很困惑。

最后,打开所有编译器警告。它会告诉你我在这里提到的很多事情。

现在,我并不是说这是这里唯一的错误,但这是最明显的。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。