为什么我的程序不打印字符串

Why my program is not printing string?

本文关键字:打印 字符串 程序 我的 为什么      更新时间:2023-10-16

我的程序需要学生的姓名和年龄,这个函数应该找到打印最年轻,最年长的学生的名字和平均年龄。但是,它没有打印最年轻学生的名字,谁能告诉我为什么?

void check(string *nameStudent, int *ageStudent, int num) {
    int i, young = 0, old = 0, sum = 0, mov = 0;
    string a, b;
    double average;
    for (i = 0; i < num; i++){
        if (*(ageStudent + mov) < young) {
            young = *(ageStudent + mov);
            a = *(nameStudent + mov);
        }
        if (*(ageStudent + mov) > old) {
            old = *(ageStudent + mov);
            b = *(nameStudent + mov);
        }
        sum += *(ageStudent + mov);
        mov++;
    }
    average = (double) sum / num;
    cout << a << " Is youngest student and " << b << " Is oldest student " << endl << average << " is average age of students";
}

您将young初始化为0 。只有当学生年龄小于0时,它才会改变younga

与其硬编码所有这些变量的初始值,不如从数组的第一个元素中获取它们。

if (num > 0) {
    young = old = sum = *ageStudent;
    a = b = *nameStudent;
}

然后你可以将循环更改为从1而不是0开始,因为你已经处理了数组的第一个元素。

顺便说一句,不需要mov变量,因为它总是包含与i相同的内容。请改用*(ageStudent + i)

void check(string *nameStudent, int *ageStudent, int num) {
    int i, young = 0, old = 0, sum = 0;
    string a, b;
    double average;
    if (num > 0) {
        young = old = sum = *ageStudent;
        a = b = *nameStudent;
    }
    for (i = 1; i < num; i++){
        if (*(ageStudent + i) < young) {
            young = *(ageStudent + i);
            a = *(nameStudent + i);
        }
        if (*(ageStudent + i) > old) {
            old = *(ageStudent + i);
            b = *(nameStudent + i);
        }
        sum += *(ageStudent + i);
        mov++;
    }
    average = num ? (double) sum / num : 0; // prevent division by 0
    cout << a << " Is youngest student and " << b << " Is oldest student " << endl << average << " is average age of students";
}

你保留了young年最年轻学生的年龄,但将其初始化为0,所以当然列表中的学生都不会满足ageStudent[i] < young。改为将其初始化为大值。通常,所讨论的类型(int(可以取的最大值是首选的。如果这对你来说听起来很复杂,在这种情况下你可以使用类似1000的东西,只要你的学生都没有超过一千岁。

将初始年轻设置为最大整数以强制设置a的比较。

严格来说,最初的 old 应该是负最大值(有符号(整数,以处理所有形式上可能的情况,并且应该解决 num=0 的情况。

你的问题是变量young。您在此处将其初始化为0

int i, young = 0, old = 0, sum = 0, mov = 0;

然后你在这里检查它:

if (*(ageStudent + mov) < young) {

但是,只要您的学生中没有人未满 0 岁,ageStudent变量将始终大于 0,因此条件将始终计算为 false

您可以通过在函数开头将 young 设置为高数字来解决问题。