谁能弄清楚为什么我的循环不能正常工作

Can anyone figure out why my loop is not working properly

这是我的问题:我需要一个遍历 char 数组的循环,并计算有多少人获得了相同的成绩、每个成绩的星星数量(每个分数相同的学生一个)和百分比 (这个问题请无视):

void displayReport(char grade[][MAX_LETTER_SIZE]) {


                            for (i = 0; i < 12; i++) {
                if (grade[i] == "A+") {
                    A++;
                    strcat(star[0], sstar);
                    percentage[i] = percentage[i] + bperecentage;
                    break;
                }
                ..                
  1. 比较字符串是用 strcmp 完成的。您当前的方法只是比较地址。

  2. break 字面意思 中断 循环。我想你想要 continue 在这里,它跳转到循环的顶部,执行循环头中指定的操作。
    实际上,您根本不需要这些语句中的任何一个,因为如果 if...else if...else 结构的一个子句评估为真,则根本不再考虑其他子句。

  3. percentage 未初始化,所以

    percentage[i] = percentage[i] + bperecentage;
    

    是未定义的行为。

  4. strcat 修改了第一个参数指向的缓冲区。由于在您的情况下这些是(空)字符串文字并且可能不会写入字符串文字,因此这是未定义的行为。如果它们是可写的,则无论如何您都需要分配更多内存,因为 typeof("") == char[1].

  5. bperecentage 将始终初始化为 0,因为 1/12 == 0。使用 1.0f / 12 来触发隐式转换。
    顺便说一句,它是 "percentage." 只有 两个 "e"s.

  6. 在你的第二个循环中有一个简单的语法错误。调用函数时不能定义数据,我什至不知道其余的是什么意思。

化妆品:

  1. 一个好的(并且在 C++ 中是强制性的)习惯是 从不 将字符串文字称为 char*s,而是 const char*s,除非存储在自动变量中。修改字符串文字是未定义的行为。

毕竟,你的代码错误百出。 读一本关于 C 的好书或教程!
当心:这些是我迄今为止 发现的所有错误。可能还有更多。