C程序赋值input后无法执行changecalc(),主函数代码是否正确?
问题分析与修复
首先说结论:你的main函数是没问题的!程序卡住的原因出在changecalc函数里,有几个关键bug需要修复:
1. 致命的while循环分号
看这段代码:
while(co > 0);{
这里的分号是罪魁祸首!它让while的循环体变成了一个空语句,后面的大括号{}和while没有任何关系。也就是说,只要co > 0成立,程序就会一直卡在这个空循环里——因为循环里没有任何修改co的代码,co的值永远不会变,自然永远满足循环条件,也就永远不会执行后面的逻辑。
你需要把这个分号删掉:
while(co > 0) {
2. 变量名拼写错误
你定义了int ver2=0;,但后面的判断里用的是var2,这会导致编译错误(如果没编译错误的话,var2会被当作未初始化的变量),应该改成:
int var2=0;
3. 遗漏小额金额的处理
当co小于5的时候(比如co=3),你的代码里没有对应的分支处理,这会导致去掉分号后,程序仍然陷入无限循环——因为co的值一直大于0,但没有任何代码去减少它。你需要添加处理1元硬币的分支(假设这是硬币找零的场景):
else { // 这里处理1元的情况,比如计数或者直接输出剩余金额 printf("剩余1元硬币数量:%d\n", co); co = 0; // 重置co,退出循环 }
另外,你的else if (co <= 0)分支放在while循环里是没必要的,因为while的条件已经是co > 0,所以这个分支永远不会被触发。你应该把最终的输出放在循环结束之后。
修正后的完整代码
#include <stdio.h> // 记得包含头文件,否则printf/scanf可能有问题 int getinput(void) { int input; printf("enter a value:\n"); scanf("%d", &input); return(input); } void changecalc(int co) { int var1=0; int var2=0; // 修正拼写错误 int var3=0; int var4=0; int var5=0; // 新增1元硬币计数变量 while(co > 0) { // 去掉多余的分号 if (co >= 50){ var1++; co = co -50; } else if (co >= 20){ var2++; co = co - 20; } else if (co >= 10){ var3++; co = co - 10; } else if (co >= 5){ var4++; co = co - 5; } else { var5 = co; // 记录1元硬币数量 co = 0; // 退出循环 } } // 循环结束后输出结果 printf("50元硬币:%d, 20元硬币:%d, 10元硬币:%d, 5元硬币:%d, 1元硬币:%d\n", var1, var2, var3, var4, var5); } int main() { int changeowed; // 这里的函数声明可以去掉,因为changecalc已经在前面定义了 // void changecalc(int changeowed); changeowed = getinput(); changecalc(changeowed); return 0; }
额外提示
- 记得在代码开头包含
<stdio.h>头文件,否则printf和scanf可能无法正常工作。 - main函数里的
void changecalc(int changeowed);声明是多余的,因为changecalc函数已经在main之前定义了,编译器已经知道它的存在。
内容的提问来源于stack exchange,提问作者yeahright
相关产品推荐
相关产品推荐

