单个函数正常,跨函数传递变量失效的C语言计费程序问题
问题修复:网络套餐计费程序的返回值传递错误
核心错误点及修复方案
inputHours函数未返回输入时长
该函数声明为int inputHours(),但函数末尾缺少返回语句,导致调用时获取的是随机垃圾值——这就是输入51小时却算出15美元的根本原因,实际传递给pkgA的不是51,而是某个小于等于50的随机数。
修复:在inputHours函数末尾添加return hours;main函数存在无效代码
代码里的inputHours;只是引用函数名,没有实际调用,属于无效代码,直接删除即可。
修复后的完整代码
#include <stdio.h> #include <ctype.h> int inputHours() { int hours; char hours_verify; do { do { printf("Number of hours from 0 to 720: "); scanf(" %i", &hours); }while(hours<0||hours>720); printf("%i hours, correct?\n", hours); printf("Y/N\n"); scanf(" %c", &hours_verify); }while(toupper((unsigned char)hours_verify) != 'Y'); printf("%i hours of internet were used.\n", hours); return hours; // 添加返回语句,返回用户输入的时长 } int pkgA(int hours) { int pkgprice= 15; // 50小时以内基础价 int extra_price= 2; // 超出50小时后的每小时价格 if(hours<=50) { printf("The total price is:$%i", pkgprice); } else if(hours<=720) { int extra_hours=hours - 50; float total_price=extra_hours * extra_price + pkgprice; printf("The total price is:$%.2f", total_price); } return 0; } int main(void) { char package_choice; char package_verify; do { do{ printf("Which package would you like to select? A, B, or C "); scanf(" %c", &package_choice); }while(toupper((unsigned char)package_choice) != 'A' && toupper((unsigned char)package_choice) != 'B' && toupper((unsigned char)package_choice) != 'C'); printf("You chose %c, correct?\n", package_choice); printf("Y/N\n"); scanf(" %c", &package_verify); }while(toupper((unsigned char)package_verify) != 'Y'); printf("You chose package %c.\n", package_choice); int hours=inputHours(); // 正确调用函数并接收返回值 switch(package_choice) { case 'A': pkgA(hours); break; case 'B': // pkgB(hours); 后续可补充实现 break; case 'C': // pkgC(hours); 后续可补充实现 break; } }
内容的提问来源于stack exchange,提问作者jtward17
相关产品推荐
相关产品推荐

