kamacoder-solutions icon indicating copy to clipboard operation
kamacoder-solutions copied to clipboard

7.平均绩点的C++写法规范化

Open lingrany opened this issue 1 year ago • 0 comments

给定的代码看起来是正确的,

然而,还有一些边界情况需要考虑和改进:

  1. 输入为空行的情况:如果输入的一行文本为空行,那么 s.size() 的值为 0,会导致除以零的错误。为了避免这种情况,可以在进入循环之前添加一个判断条件,如果 s 为空行,则直接跳过当前循环。

  2. 输入中包含多个连续空格的情况:如果输入中有多个连续空格,那么这些连续空格会被视为多个分隔符,导致计算的结果不准确。可以考虑在处理空格时,只跳过第一个连续空格,将后续连续空格视为非法字符。

下面是对代码的进一步改进,解决了上述边界情况:

#include <iostream>
#include <stdio.h>
using namespace std;

int main() {
    string s;
    while (getline(cin, s)) {
        if (s.empty()) continue; // 跳过空行

        float sum = 0;
        int count = 0;
        int flag = 1;

        for (int i = 0; i < s.size(); i++) {
            if (s[i] == ' ') {
                // 跳过连续的空格
                if (i > 0 && s[i - 1] == ' ') continue;
                else continue;
            }
            else if (s[i] == 'A') { sum += 4; count++; }
            else if (s[i] == 'B') { sum += 3; count++; }
            else if (s[i] == 'C') { sum += 2; count++; }
            else if (s[i] == 'D') { sum += 1; count++; }
            else if (s[i] == 'F') { sum += 0; count++; }
            else {
                flag = 0;
                cout << "Unknown" << endl;
                break;
            }
        }

        if (flag && count > 0) {
            printf("%.2f\n", sum / count);
        }
    }

    return 0;
}

通过添加对空行和连续空格的处理,上述代码能够更准确地计算评分的平均值,并避免了除以零的错误。

lingrany avatar Dec 08 '23 10:12 lingrany