You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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 / 10
    
    修复后:
    int 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 17:20:32