kamacoder-solutions
kamacoder-solutions copied to clipboard
7.平均绩点的C++写法规范化
给定的代码看起来是正确的,
然而,还有一些边界情况需要考虑和改进:
-
输入为空行的情况:如果输入的一行文本为空行,那么
s.size()
的值为 0,会导致除以零的错误。为了避免这种情况,可以在进入循环之前添加一个判断条件,如果s
为空行,则直接跳过当前循环。 -
输入中包含多个连续空格的情况:如果输入中有多个连续空格,那么这些连续空格会被视为多个分隔符,导致计算的结果不准确。可以考虑在处理空格时,只跳过第一个连续空格,将后续连续空格视为非法字符。
下面是对代码的进一步改进,解决了上述边界情况:
#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;
}
通过添加对空行和连续空格的处理,上述代码能够更准确地计算评分的平均值,并避免了除以零的错误。