C语言编译错误求助:check_validity函数类型冲突问题
C语言编译错误修复:类型冲突与语法问题
编译报错信息
error: credit.c:38:6: error: conflicting types for 'check_validity' bool check_validity(credit_card_number) ^ credit.c:8:6: note: previous declaration is here bool check_validity(long); ^ fatal error: too many errors emitted, stopping now [-ferror-limit=]
错误分析与修复方案
1. 函数参数类型不匹配
check_validity函数声明时指定参数类型为long,但定义时未明确参数类型,导致类型冲突。修复时需在定义时补上long类型:bool check_validity(long credit_card_number)inspect_length函数同样存在定义时未指定参数类型的问题,声明为bool inspect_length(int),定义时要改为bool inspect_length(int num_digits)
2. 缺失分号与语法错误
check_validity函数中,一行内写了三条语句却未拆分和加分号:
错误代码:
修复后:int num_1 = credit_card_number % 10 * 2 total = total + num_1 % 10 total = total + num_1 / 10int num_1 = (credit_card_number % 10) * 2; total += num_1 % 10; total += num_1 / 10;total = total + credit_card_number %缺少取模操作数,且未加分号,修复为:total += credit_card_number % 10;credit_card_number / 10;是无效表达式,需赋值给自身更新变量:credit_card_number = credit_card_number / 10;
3. 代码简化(可选)
inspect_length函数的if-else结构可以直接返回条件判断结果,简化代码逻辑。
修正后的完整代码
#include <cs50.h> #include <stdio.h> int find_num_digits(long); bool check_validity(long); bool inspect_length(int); int main(void) { long credit_card_number; // Prompt for input do { credit_card_number = get_long("Credit card no: "); } while (credit_card_number <= 0); int num_digits = find_num_digits(credit_card_number); // Find number of digits in the credit card number bool is_length_card_valid = inspect_length(num_digits); bool is_card_valid = check_validity(credit_card_number); // Verify Luhn's Algorithm } bool inspect_length(int num_digits) { return (num_digits == 13 || num_digits == 15 || num_digits == 16); } bool check_validity(long credit_card_number) { int total = 0; int counter = 0; while (credit_card_number != 0) { if (counter % 2 == 0) { int num_1 = (credit_card_number % 10) * 2; total += num_1 % 10; total += num_1 / 10; } else { total += credit_card_number % 10; } counter++; credit_card_number = credit_card_number / 10; } return (total % 10 == 0); } int find_num_digits(long card_number) { int digits = 0; while (card_number != 0) { card_number = card_number / 10; digits++; } return digits; }
内容的提问来源于stack exchange,提问作者Velosion
相关产品推荐
相关产品推荐

