为什么我在 C 中遇到条件问题?
Why I am facing the condition problem in C?
这里出了什么问题?如果我输入 4123456789098 然后用这个数字除以 10^12 它应该等于 4 但它不是?
我的代码:
#include <stdio.h>
#include <cs50.h>
#include <math.h>
int main(void)
{
while (true)
{
long long int id = get_long("Number: ") ;
int k = 0 ;
while (id != 0)
{
id = id / 10 ;
k++ ;
}
printf("%i\n", k) ;
// VISA
if (k == 13)
{
int x = id / pow(10 , 12) ;
if (x == 4)
{
printf("VISA\n") ;
break ;
}
else
{
printf("INVALID V\n") ;
}
}
// AMEX
else if (k == 15)
{
int y = id / pow(10 , 13) ;
if (y == 34 || y == 37)
{
printf("AMEX\n") ;
break ;
}
else
{
printf("INVALID A\n") ;
}
}
// VISA or MASTERCARD
else if (k == 16)
{
int z_M = id / pow(10 , 14) ;
int z_V = id / pow(10 , 15) ;
if (z_M >= 51 && z_V <= 55)
{
printf("MASTERCARD\n") ;
break ;
}
else if (z_V == 4)
{
printf("VISA\n") ;
break ;
}
else
{
printf("INVALID V or A\n") ;
}
}
}
}
输出:
Number: 4123456789098
13
INVALID V
预期输出:
Number: 4123456789098
13
VISA
您正在修改原始 id
变量的值。然后,当您尝试使用 int x = id / pow(10, 12)
查找第一个数字时。 x
将始终为零,因为 id
将始终为零。您可以做的一件事是将 id
的值存储在某个临时变量中。
您可以从
更改此设置
while (id != 0)
{
id = id / 10 ;
k++ ;
}
对此:
long long temp = id;
while (temp != 0)
{
temp = temp / 10 ;
k++ ;
}
这里出了什么问题?如果我输入 4123456789098 然后用这个数字除以 10^12 它应该等于 4 但它不是?
我的代码:
#include <stdio.h>
#include <cs50.h>
#include <math.h>
int main(void)
{
while (true)
{
long long int id = get_long("Number: ") ;
int k = 0 ;
while (id != 0)
{
id = id / 10 ;
k++ ;
}
printf("%i\n", k) ;
// VISA
if (k == 13)
{
int x = id / pow(10 , 12) ;
if (x == 4)
{
printf("VISA\n") ;
break ;
}
else
{
printf("INVALID V\n") ;
}
}
// AMEX
else if (k == 15)
{
int y = id / pow(10 , 13) ;
if (y == 34 || y == 37)
{
printf("AMEX\n") ;
break ;
}
else
{
printf("INVALID A\n") ;
}
}
// VISA or MASTERCARD
else if (k == 16)
{
int z_M = id / pow(10 , 14) ;
int z_V = id / pow(10 , 15) ;
if (z_M >= 51 && z_V <= 55)
{
printf("MASTERCARD\n") ;
break ;
}
else if (z_V == 4)
{
printf("VISA\n") ;
break ;
}
else
{
printf("INVALID V or A\n") ;
}
}
}
}
输出:
Number: 4123456789098
13
INVALID V
预期输出:
Number: 4123456789098
13
VISA
您正在修改原始 id
变量的值。然后,当您尝试使用 int x = id / pow(10, 12)
查找第一个数字时。 x
将始终为零,因为 id
将始终为零。您可以做的一件事是将 id
的值存储在某个临时变量中。
您可以从
while (id != 0)
{
id = id / 10 ;
k++ ;
}
对此:
long long temp = id;
while (temp != 0)
{
temp = temp / 10 ;
k++ ;
}