c - 控制可能到达非空函数的结尾。C
问题描述
我在此代码的返回行上收到上述错误。
// Finds the length of the card number
int find_length(long long n)
{
int len;
for (len = 0; n != 0; n /= 10, len++)
return len;
}
完整代码:
#include <stdio.h>
#include <cs50.h>
#include <unistd.h>
void print_credit_card_brand(long long ccn);
bool check_validity(long long credit_card_number);
int find_length(long long n);
bool checksum(long long ccn);
int main(void)
{
long long credit_card_number;
do
{
credit_card_number = get_long_long("Enter valid credit card number without spaces or hyphens: ");
} while (credit_card_number < 0);
if (check_validity(credit_card_number) == true)
print_credit_card_brand(credit_card_number);
else
printf("INVALID\n");
}
// Checks validity of credit card
bool check_validity(long long credit_card_number)
{
int len = find_length(credit_card_number);
return (len == 13 || len == 15 || len == 16) && checksum(credit_card_number);
}
// Finds the length of the card number
int find_length(long long n)
{
int len;
for (len = 0; n != 0; n /= 10, len++)
return len;
}
// Determines validity using Luhn’s Algorithm
bool checksum(long long ccn)
{
int sum = 0;
for (int i =0; ccn != 0; i++, ccn /= 10)
{
if (i % 2 == 0)
sum += ccn % 10;
else
{
int digit = 2 * (ccn % 10);
sum += digit / 10 + digit % 10;
}
}
return (sum % 10) == 0;
}
// Prints results besed on length of credit card and 1st 2 digits
void print_credit_card_brand(long long ccn)
{
if ( (ccn >= 34e13 && ccn < 35e13) || (ccn >= 37e13 && ccn < 38e13) )
printf("AMEX\n");
else if (ccn >= 51e14 && ccn < 56e14)
printf("MASTERCARD\n");
else if ( (ccn >= 4e12 && ccn < 5e12) || (ccn >= 4e15 && ccn < 5e15) )
printf("VISA\n");
else
printf("INVALID\n");
}
解决方案
您忘记在 for 循环后放置分号。所以有了这个错字,函数看起来像
int find_length(long long n)
{
int len;
for (len = 0; n != 0; n /= 10, len++)
{
return len;
}
}
该功能可以通过以下方式查看
unsigned int find_length( unsigned long long n )
{
const unsigned long long Base = 10;
unsigned int len = 0;
for ( ; n != 0; n /= Base )
{
++len;
}
return len;
}
请注意,您应该使用无符号整数类型。否则用户可以输入一个负数,你的程序会产生错误的结果。
推荐阅读
- c# - 用随机值填充空的 Guid 列表的最简单方法
- php - How to change position of login or register succesfull message?
- apache - Apache wicketStuff-GMap Api
- php - 可以将 PHP 扩展从 Docker“隧道”到外部?
- jquery - 当我单击第一个 div 以外的另一个 div 时我会做什么,然后第一个 div 的 css 将消失?
- c# - C# BufferedStream - 是否有可能知道进步?
- python - SQLITE 何时将数据写入驱动器?
- python - 是否可以在树视图小部件中选择多行?
- ios - 如何为 EXC_BAD_ACCESS 崩溃设置新的处理程序/响应程序
- javascript - 403:配额错误:批量请求超出用户速率限制