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

C语言声明终止错误求助:澳元找零程序编译问题排查

嘿,我来帮你搞定这个编译错误和代码里的其他问题!

首先,你遇到的那个「Declaration terminated incorrectly」编译错误,根源非常直接——就是PrintDisplay函数定义的这一行:

void PrintDisplay(void); { 

你在函数声明的末尾多写了一个分号!C语言里函数定义的格式是返回类型 函数名(参数列表) { 函数体 },这里的分号完全多余,把它删掉,改成void PrintDisplay(void) {,这个编译错误就会消失。

不过你的代码还有不少其他语法和逻辑问题,不解决的话就算编译通过也跑不对,我一起给你梳理下:

1. 函数不能直接返回多个值

你在CalculateChange里写的return(int FiftyCentAmount, int TwentyCentAmount, int TenCentAmount, int FiveCentAmount);是完全错误的,C语言不支持函数直接返回多个基础类型的值。我们可以用指针参数来解决这个问题——让函数修改外部变量的值,把计算结果存进去。

2. 函数调用方式错误

main函数里的函数调用全写错了!比如GetChange(int change);这种写法是声明函数的格式,调用的时候不需要写参数类型,应该是int change = GetChange();,把函数的返回值赋值给变量。CalculateChange和PrintResult的调用也犯了同样的错误,而且还有手滑的变量名拼写错误(比如TenCentAmountCentAmount)。

3. 硬币计算逻辑有问题

你原来的if-else if只会执行一次,比如输入100的话,只会减去一次50就停止了,根本算不出正确的硬币数量。其实因为金额是5的整数倍,我们可以用除法和取余直接算出每种硬币的数量,高效又简洁。

4. printf的转义字符错误

你写的/n是错的,应该是\n,否则不会触发换行。另外%*c在这里完全没必要,直接用\n就行。

修正后的完整代码

#include <stdio.h>

// 修复了多余分号的问题
void PrintDisplay(void) { 
    printf("Enter an amount to calculate change: \n"); 
} 

int GetChange(void) { 
    int change; 
    scanf("%d", &change); 
    return change; 
} 

// 使用指针参数传递多个计算结果
void CalculateChange(int change, int *fifty, int *twenty, int *ten, int *five) {
    *fifty = change / 50;
    change = change % 50;
    
    *twenty = change / 20;
    change = change % 20;
    
    *ten = change / 10;
    change = change % 10;
    
    *five = change / 5;
} 

void PrintResult(int FiftyCentAmount, int TwentyCentAmount, int TenCentAmount, int FiveCentAmount) { 
    printf("The amount of each coin denomination you should give are:\n");
    printf("50c: %d\n", FiftyCentAmount); 
    printf("20c: %d\n", TwentyCentAmount); 
    printf("10c: %d\n", TenCentAmount); 
    printf("5c: %d\n", FiveCentAmount); 
} 

int main(void) { 
    PrintDisplay(); 
    int change = GetChange(); 
    
    int fifty, twenty, ten, five;
    CalculateChange(change, &fifty, &twenty, &ten, &five); 
    
    PrintResult(fifty, twenty, ten, five); 
    return 0; 
}

你可以试试这段代码,它应该能正常编译运行,正确计算每种硬币的数量啦。

内容的提问来源于stack exchange,提问作者Wil

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 10:08:38