C 变量指定为 long long 但被识别为 int
C variable specified as a long long but recognized as an int
我正在开发一个程序来检查 CS50 信用卡号码的有效性 class 我正在使用(这是合法的,我发誓哈哈),我目前正在努力正确地获得第一个每个 CC# 的两个数字以检查它来自哪个公司。为了清楚起见,我已经评论了每个部分的作用,还评论了我的问题出现的地方。
#include <stdio.h>
#include <stdlib.h>
#include <cs50.h>
#include <math.h>
#include <string.h>
int main(void)
{
long long ccn = get_long_long("Enter CCN: \n");
int count = 0;
long long ccn1 = ccn;
// finds the amount of digits entered and stores that in int count.
while (ccn1 != 0)
{
ccn1 /= 10;
+count;
}
printf("%i \n", count);
// ln 17- 19 should take int count, subtract two, put that # as the power of 10,
// then divide the CC# by that number to get the first two numbers of the CC#.
long long power = count - 2;
// here is where i get the error. its a long long so it
// should hold up to 19 digits and im only storing 14 max
// but it says that 10^14th is too large for type 'int'
long long divide = pow(10,power);
long long ft = ccn / divide;
printf("power: %i \n", power); //ln 20-22 prints the above ints for debug
printf("Divide: %lli \n", divide);
printf("First two: %lli \n", ft);
string CCC;
// ln 24-35 cross references the amount of digits in the CC#
// and the first two digits to find the comapany of the credit card
if ((count == 15) && (ft = 34|37))
{
CCC = "American Express";
}
else if ((count == 16) && (ft = 51|52|53|54|55))
{
CCC = "MasterCard";
}
else if ((count = 13|16) && (ft <=49 && ft >= 40))
{
CCC = "Visa";
}
printf("Company: %s\n", CCC);
}
第一个问题是循环中的+count
。这应该是 ++count
。因此,count
保持在 0 而 power = -2
。你可以避免所有那些强大的东西。你已经有了循环,你可以用它来获取前两位数字:
int ft = 0;
while (ccn1 != 0)
{
// When you are down to 10 <= ccn1 < 100, store it
if (ccn1 < 100 && ccn1 > 9) ft = ccn1;
ccn1 /= 10;
++count;
}
你的第二个问题是你如何进行比较。
if ((count == 15) && (ft = 34|37))
首先,=
是赋值,==
测试相等性。其次,|
是按位或,||
是逻辑或。第三,你不能像那样测试多个值。正确方法:
if ((count == 15) && (ft == 34 || ft == 37))
我正在开发一个程序来检查 CS50 信用卡号码的有效性 class 我正在使用(这是合法的,我发誓哈哈),我目前正在努力正确地获得第一个每个 CC# 的两个数字以检查它来自哪个公司。为了清楚起见,我已经评论了每个部分的作用,还评论了我的问题出现的地方。
#include <stdio.h>
#include <stdlib.h>
#include <cs50.h>
#include <math.h>
#include <string.h>
int main(void)
{
long long ccn = get_long_long("Enter CCN: \n");
int count = 0;
long long ccn1 = ccn;
// finds the amount of digits entered and stores that in int count.
while (ccn1 != 0)
{
ccn1 /= 10;
+count;
}
printf("%i \n", count);
// ln 17- 19 should take int count, subtract two, put that # as the power of 10,
// then divide the CC# by that number to get the first two numbers of the CC#.
long long power = count - 2;
// here is where i get the error. its a long long so it
// should hold up to 19 digits and im only storing 14 max
// but it says that 10^14th is too large for type 'int'
long long divide = pow(10,power);
long long ft = ccn / divide;
printf("power: %i \n", power); //ln 20-22 prints the above ints for debug
printf("Divide: %lli \n", divide);
printf("First two: %lli \n", ft);
string CCC;
// ln 24-35 cross references the amount of digits in the CC#
// and the first two digits to find the comapany of the credit card
if ((count == 15) && (ft = 34|37))
{
CCC = "American Express";
}
else if ((count == 16) && (ft = 51|52|53|54|55))
{
CCC = "MasterCard";
}
else if ((count = 13|16) && (ft <=49 && ft >= 40))
{
CCC = "Visa";
}
printf("Company: %s\n", CCC);
}
第一个问题是循环中的+count
。这应该是 ++count
。因此,count
保持在 0 而 power = -2
。你可以避免所有那些强大的东西。你已经有了循环,你可以用它来获取前两位数字:
int ft = 0;
while (ccn1 != 0)
{
// When you are down to 10 <= ccn1 < 100, store it
if (ccn1 < 100 && ccn1 > 9) ft = ccn1;
ccn1 /= 10;
++count;
}
你的第二个问题是你如何进行比较。
if ((count == 15) && (ft = 34|37))
首先,=
是赋值,==
测试相等性。其次,|
是按位或,||
是逻辑或。第三,你不能像那样测试多个值。正确方法:
if ((count == 15) && (ft == 34 || ft == 37))