无法理解循环中的值如何工作

时间:2017-06-24 05:49:09

标签: c cs50

我尝试在第2周后为cs50 pset1&#39的问题编写代码:credit.c(更舒服)。我的代码如下。问题是' sumx'和' sumy'只是0,因此'总和'总是等于0.所以每当我给出正确的信用卡号码时,它就会转到新的行和程序结束。我怎样才能解决这个问题,以及为什么要解决这个问题。和' sumy'是不是按照算法加起来各自的总和?

我的代码是:

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

int main(void){

  long long i;
  do{
    printf("Your credit card number:\n");   
    i = get_long_long();
  }
  while(i < 4e12 || i > 5.5e15);
  int count = 0;
  int n;
  long long c = i;

  while(i != 0){
    n = i%10;
    i = i/10;
    count++;
  }
  int x[count];

  for(int j = 0; j < count; j++){
    x[j] = c%10;
    i = c/10;
  }

  int sumx = 0;

  for(int j = 0; j < count - 1; j += 2){
    x[j] = x[j] * 2;
    sumx = sumx + x[j];
    printf("%i", sumx);
  }

  int sumy = 0;

  for(int j = 0; j < count; j += 2){
    sumy = sumy + x[j];
  }  

  int sum;
  sum = sumx + sumy;

  if(sum%10 == 0){
    if((count == 15 && x[14] == 3) && (x[13] == 4 || x[13] == 7)){
        printf("AmEx\n");
    }
    else if((count == 16 && x[15] == 5) && (x[14] > 1 || x[14] < 5)){
        printf("MASTERCARD\n");
    }
    else if((count == 13 && x[12] == 4) || (count == 16 && x[15] == 4)){
        printf("VISA\n");
    }
  }
  else{
    printf("Invalid Number\n");
  }

  return 0;
  }

1 个答案:

答案 0 :(得分:0)

func test_A() {
  let array = [Dog(), Cat(), Snoopy()] as [Animal]
  array.forEach() {
    $0.hello()
  }
  //  Bark!
  //  Meow!
  //  Zzz..
}

func sayHello<T: Animal>(_ x: T) {
  x.hello()
}

func test_B() {
  sayHello(Dog())
  sayHello(Cat())
  sayHello(Snoopy())
  //  Bark!
  //  Meow!
  //  Zzz..
}

我对您的代码进行了一些更正,将//#include <cs50.h> #include <stdio.h> int main(void){ long long i=4111111111111111; //Master: 5105105105105100;//16 //visa: 4111111111111111 printf("%lld\n",i); //~ do{ //~ printf("Your credit card number:\n"); //~ i = get_long_long(); //~ } //~ while(i < 4e12 || i > 5.5e15); int count = 0; long long c = i; int k=0; int x[100];// while(c != 0){ x[k] = c%10; c = c/10; printf("%lld\n",c); count++; k++; } //k==count printf("count:%d\n",count); printf("k:%d\n",k); // x[i] contains all the digits of credit card printf("print x[i]\n"); for (int i=0;i<count;i++){ printf("%d ",x[i]); } printf("\n"); int addsum=0,x2prod=0; for (int j=0; j<k; j+=2 ){ addsum += x[j]; } printf("addsum:%d\n",addsum); for (int j=1; j<k; j+=2 ){ if ( (2 * x[j]) > 9 ){ //have 2 digit x2prod += (2 * x[j]) / 10; x2prod += (2 * x[j]) % 10; } else // have one digit x2prod += 2 * x[j]; } printf("x2prod:%d\n",x2prod); int sum; sum = addsum + x2prod; printf("\nsum: %d\n",sum); if(sum%10 == 0){ if((count == 15 && x[14] == 3) && (x[13] == 4 || x[13] == 7)){ printf("AmEx\n"); } else if((count == 16 && x[15] == 5) && (x[14] > 1 || x[14] < 5)){ printf("MASTERCARD\n"); } else if((count == 13 && x[12] == 4) || (count == 16 && x[15] == 4)){ printf("VISA\n"); } } else{ printf("Invalid Number\n"); } return 0; } 数组中的所有信用卡号码存储在x[]中。

我只用三个样本检查了代码输出,顺便说一下这不是一个可靠的版本,试着捕获任何错误。

当您阅读我的评论时,我对此一无所知,但通过执行简单搜索link

告诉我该怎么做并按照你的方式解码它。