编写贪心算法(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
相关产品推荐
相关产品推荐

