为什么我的程序不打印字符串
Why my program is not printing string?
我的程序需要学生的姓名和年龄,这个函数应该找到打印最年轻,最年长的学生的名字和平均年龄。但是,它没有打印最年轻学生的名字,谁能告诉我为什么?
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
时,它才会改变young
和a
。
与其硬编码所有这些变量的初始值,不如从数组的第一个元素中获取它们。
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 设置为高数字来解决问题。
相关文章:
- C++ |<<运算符重载和打印字符串
- 反向打印字符串
- C++ 用于在数组中打印字符串的随机数
- C 不打印字符串
- 如何在没有同步的情况下使用多个线程(2、4,8、16 个线程)在循环(10,100、1000 个周期)中打印字符串?
- 尝试打印字符串时"Python Exception <class 'gdb.error'> There is no member named _M_dataplus."
- 使用带有 std::cout 的单引号打印字符串实际上打印了数字
- 使用迭代从链表向后打印字符串
- 如何打印字符串而不是数字
- 使用 for 循环打印字符串数组无法正常工作 (C++)
- C++ 打印字符串的内容
- 如何在空格后打印字符串的其余部分
- 如何在C 中打印字符串向量的向量
- 当我打印字符串时,我不知道它是什么输出
- 尝试以随机字符(长读取)打印字符串返回结果
- 从左到右打印字符串的组合(不是排列)c++
- cout 不能一致地打印字符串和变量值,导致输出未对齐
- C++ cout 在擦除换行符后打印字符串不正确
- 从对象数组打印字符串对象
- C++ 粘贴值和打印字符串