Sldx697 2023-02-27 17:35 采纳率: 100%
浏览 32
已结题

关于#c++#的问题:#include <iostream>

这个代码哪里出问题了呢
以下是题目
小民所在学院对实验班的n(n≤ 100)名同学进行程序设计比赛培训,实验班的同学有如下信息:

        姓名(不超过20个字符的字符串,没有空格)

        年龄(周岁,整数)

        去年比赛成绩(整数,0~700分 )

  经过为期一年的程序设计比赛培训,所有同学的成绩都有所提高,提升了20%(注:比赛成绩最高为700分,若去年比赛成绩为0分或1分,则统一提高到120分)。

  输入学生信息,请设计一个结构体储存这些学生信息,并设计一个函数模拟培训过程,其参数是这样的结构体类型,返回同样的结构体类型,并输出学生信息。
#include<iostream>
#include<stdio.h>
using namespace std;
struct student{
    char name[20];
    int old;
    int score;
    }num[20];  
int main()
{
    int n,j,i;
    cin>>n;
    for( i=0;i<n;i++)
    {
    cin.getline(num[i].name,20);
    cin>>num[i].old>>num[i].score;
    }
    for( i=0;i<n;i++)
    {
        num[i].old++;
        if(num[i].score==0||num[i].score==1){
        num[i].score=150;
        }
        else if(num[i].score*=1.2>=700){
            num[i].score=700;
        }
        else  {num[i].score=num[i].score*1.2;
        }
        
        cout<<num[i].name<<num[i].old<<num[i].score;
         
    } 
    return 0;
}


  • 写回答

3条回答 默认 最新

  • MarkHan_ 2023-02-27 17:42
    关注

    该回答引用GPTᴼᴾᴱᴺᴬᴵ
    这段代码可能有以下问题:

    1. cin.getline(num[i].name,20); 的作用是读取一行输入,但在前面有一个cin语句,因此可能会跳过输入姓名的步骤。可以在读取姓名之前加上cin.ignore()语句,用于忽略前面的回车符等字符。

    2. else if(num[i].score*=1.2>=700) 这一行语句有一个错误。应该使用else if(num[i].score1.2>=700),而不是else if(num[i].score=1.2>=700)。前者表示将分数乘以1.2后,判断是否大于等于700分;而后者会先将分数乘以1.2,再将结果与700比较,这不是我们想要的结果。

    3. 在输出时,需要用空格或换行符将姓名、年龄和分数分隔开。可以在输出语句中加入空格或换行符。

    4. 在循环结束后,应该输出一个换行符,以便输出结果更清晰。

    修正后的代码如下:

    #include<iostream>
    #include<stdio.h>
    using namespace std;
    
    struct student{
        char name[20];
        int old;
        int score;
    };  
    
    int main()
    {
        int n,j,i;
        cin>>n;
        cin.ignore(); // 忽略前面的回车符等字符
        for(i=0;i<n;i++)
        {
            cin.getline(num[i].name,20);
            cin>>num[i].old>>num[i].score;
            cin.ignore(); // 忽略姓名后面的回车符
        }
        for(i=0;i<n;i++)
        {
            num[i].old++;
            if(num[i].score==0||num[i].score==1){
                num[i].score=150;
            }
            else if(num[i].score*1.2>=700){
                num[i].score=700;
            }
            else{
                num[i].score=num[i].score*1.2;
            }    
            cout<<num[i].name<<" "<<num[i].old<<" "<<num[i].score<<endl
    
    
    

    注意,这里假设结构体数组num已经定义好了,并且它的大小为20。如果需要处理更多的学生信息,需要增加数组的大小。同时,在输出时,建议使用空格将不同字段分隔开,这样输出结果更美观。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 3月7日
  • 已采纳回答 2月27日
  • 创建了问题 2月27日

悬赏问题

  • ¥15 用土力学知识进行土坡稳定性分析与挡土墙设计
  • ¥70 PlayWright在Java上连接CDP关联本地Chrome启动失败,貌似是Windows端口转发问题
  • ¥15 帮我写一个c++工程
  • ¥30 Eclipse官网打不开,官网首页进不去,显示无法访问此页面,求解决方法
  • ¥15 关于smbclient 库的使用
  • ¥15 微信小程序协议怎么写
  • ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?
  • ¥20 怎么用dlib库的算法识别小麦病虫害
  • ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?