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

