You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++编程作业:实现用户输入采集、计数并以列表/表格展示结果

问题修复与计数功能实现方案

现有代码前置问题修复

  • 你当前定义的结构体数组obj长度仅为2,但输入循环要写入8条宾客数据,存在数组越界问题,会触发未定义行为,首先要把数组长度修改为8:
struct emp{
  char name[20];
  char choice[20];
}obj[8]; // 把原来的2改成8

计数功能实现思路

你之前if/else不生效的核心原因是:C语言风格的char数组字符串不能直接用==判断相等,需要使用<cstring>头文件提供的strcmp函数做比较,返回值为0时代表两个字符串完全一致。
具体实现步骤:

  1. 引入<cstring>头文件用于字符串比较
  2. 定义两个计数变量,分别统计素食、非素食选择的人数
  3. 遍历所有宾客数据,通过判断choice字段的值累加对应计数
  4. 最后输出统计结果即可

修改后完整可运行代码

#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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 14:24:04