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

编写贪心算法(Greedy algorithm)代码遇expected identifier错误,请求排查

贪心算法代码报错排查与修复

错误信息

practice.c:14:9: error: expected identifier or '(';
fatal error: too many errors emitted, stopping now [-ferror-limit=];
2 errors generated;
make: *** [: practice] Error 1

原始代码

#include <cs50.h>
#include <stdio.h>
int calculate_quarters(int cents);
int calculate_dimes(int cents);
int calculate_nickels(int cents);
int calculate_pennies(int cents);
int answer(void);
int quarters(void);
int dimes(void);
int nickels(void);
int pennies(void);
int main(void);
    do
    {
        int cents = get_int("How much change? \n");

        return cents;
    }
    while (cents <= 0)

    int quarters = 0;
    do
    {
        cents = cents - 25;
        quarters++;
    }
    while (cents >=25)
    return quarters;
    return cents;
    int dimes = 0;
    do
       {
        cents = cents - 10;
        dimes++;
        }
    while (cents >= 10)

    return dimes;
    return cents;
    int nickels = 0;
    do

    {
        cents = cents -5;
        nickels++;
    }
    while (cents >= 5)
    return nickels;
    return cents;
    int pennies = 0;
    do
    {
        cents = cents - 1;
        pennies++;
    }
     while (cents > 0)

    return pennies;
    return cents;
    do
    {
        printf("Quarters amount: &i\n" quarters);
        printf("\n");
        printf("Dimes amount: &i\n" dimes);
        printf("\n");
        printf("Nickels amount: &i\n" nickels);
        printf("\n");
        printf("Pennies amount: &i\n" pennies);
        printf("\n");
    }
    while (cents = 0)

问题分析

你的代码存在多个语法错误和逻辑问题,核心错误直接导致编译失败:

  • main函数语法错误:int main(void);末尾的分号是函数声明的写法,定义函数必须用{}包裹全部代码。你未给main函数添加大括号,编译器无法识别代码结构,这是触发expected identifier or '('错误的直接原因。
  • do-while循环语法错误:每个while语句末尾都缺少分号,这是C语言的强制语法要求。
  • 变量作用域错误:cents定义在第一个do-while循环内部,外部代码无法访问该变量,后续所有使用cents的语句都会报错。
  • return语句滥用:在main函数的循环内部return cents会直接终止程序,完全不符合业务逻辑;main函数正常结束应返回0。
  • printf格式化错误:占位符需用%i而非&i,且格式化字符串与参数之间必须用逗号分隔,比如printf("Quarters amount: %i\n", quarters);。
  • 逻辑结构混乱:冗余声明了一堆未使用的函数,硬币计算的顺序和逻辑完全混乱,没有按正常流程组织代码。
  • 条件判断错误:最后一个while的cents = 0是赋值操作,不是相等判断,正确写法是cents == 0,且该循环本身逻辑多余。

修复后的代码

#include <cs50.h>
#include <stdio.h>

int main(void)
{
    int cents;
    // 获取合法的零钱金额
    do
    {
        cents = get_int("How much change? \n");
    }
    while (cents <= 0);

    int quarters = 0;
    do
    {
        cents -= 25;
        quarters++;
    }
    while (cents >= 25);

    int dimes = 0;
    do
    {
        cents -= 10;
        dimes++;
    }
    while (cents >= 10);

    int nickels = 0;
    do
    {
        cents -= 5;
        nickels++;
    }
    while (cents >= 5);

    int pennies = cents; // 剩余金额直接等于便士数量,无需循环

    // 输出各硬币数量
    printf("Quarters amount: %i\n", quarters);
    printf("Dimes amount: %i\n", dimes);
    printf("Nickels amount: %i\n", nickels);
    printf("Pennies amount: %i\n", pennies);

    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 14:17:44