C++编程作业:实现用户输入采集、计数并以列表/表格展示结果
问题修复与计数功能实现方案
现有代码前置问题修复
- 你当前定义的结构体数组
obj长度仅为2,但输入循环要写入8条宾客数据,存在数组越界问题,会触发未定义行为,首先要把数组长度修改为8:
struct emp{ char name[20]; char choice[20]; }obj[8]; // 把原来的2改成8
计数功能实现思路
你之前if/else不生效的核心原因是:C语言风格的char数组字符串不能直接用==判断相等,需要使用<cstring>头文件提供的strcmp函数做比较,返回值为0时代表两个字符串完全一致。
具体实现步骤:
- 引入
<cstring>头文件用于字符串比较 - 定义两个计数变量,分别统计素食、非素食选择的人数
- 遍历所有宾客数据,通过判断choice字段的值累加对应计数
- 最后输出统计结果即可
修改后完整可运行代码
#include <iostream> #include <cstring> // 新增字符串比较所需头文件 using namespace std; struct emp{ char name[20]; char choice[20]; }obj[8]; // 修复数组越界问题 int main(){ int i; // 新增计数变量,初始值为0 int veg_count = 0, non_veg_count = 0; for(i=0;i<8;i++){ cout<<"Enter guest "<<i+1<< " Enter choice vegeterian/non-vegeterian: \n"; cin>>obj[i].name>>obj[i].choice; // 输入时直接统计,也可以后续遍历统一统计 if(strcmp(obj[i].choice, "vegeterian") == 0){ veg_count++; } else if(strcmp(obj[i].choice, "non-vegeterian") == 0){ non_veg_count++; } } cout<<"Table of Guests: \nNAME\tCHOICE\t\n"; for(i=0;i<8;i++){ cout<<obj[i].name<<"\t"<<obj[i].choice<<"\t\t"<<"\n"; } // 输出统计结果 cout<<"\n统计结果:\n"; cout<<"选择素食的人数:"<<veg_count<<"\n"; cout<<"选择非素食的人数:"<<non_veg_count<<"\n"; cout<<"总宾客数:"<<veg_count + non_veg_count<<"\n"; return 0; }
注意事项
- 输入选择时要严格匹配
vegeterian、non-vegeterian的拼写,如果需要兼容大小写或者拼写容错,可以自行添加额外的字符串处理逻辑 - 如果后续需要扩展宾客数量,建议用
std::vector替代固定长度数组,无需手动管理长度更安全
内容的提问来源于stack exchange,提问作者Al Bundy
相关产品推荐
相关产品推荐

