C++中及格计数正常但不及格计数始终显示12,如何排查修复?
问题分析与修复方案
你的代码核心问题是局部变量未初始化:pass_count和fail_count作为函数内的局部变量,声明时未赋予初始值0,C++中局部变量默认会携带随机的垃圾值。你看到不及格计数始终是12,只是本次运行时fail_count的初始垃圾值刚好为12,实际每次运行结果都可能出现随机偏差(及格计数看似正常也只是巧合)。
修复要点
- 声明计数变量时直接初始化为0,确保统计从0开始累加
- 函数声明返回
string但实际无返回值,会触发未定义行为,需将返回类型改为void
修改后的完整代码
#include <iostream> #include <sstream> #include <string> using namespace std; void passAndFailCount(string grades){ int pass_count = 0; int fail_count = 0; istringstream myStream(grades); string grade; while(myStream>>grade){ int i_grade=stoi(grade); if (i_grade>=55){ ++pass_count; } else{ ++fail_count; } } cout<<"Pass: "<<pass_count<<endl<<"Fail: "<<fail_count<<endl; } int main() { string grades; getline(cin, grades); passAndFailCount(grades); }
内容的提问来源于stack exchange,提问作者jackson
相关产品推荐
相关产品推荐

