0

我正在为我的基础课程制定一个非常基本的计划,并且我的所有内容 98% 都按预期工作。

这个程序取三个年级的名字,取平均值,然后将它们输出到一个表中,但由于assignmentName[]与 位于同一行代码,它会向右 grade[]推确定用户输入的字符数。问题截图grade[]

这是我目前为表编写的代码:

cout << "___________________________\n";
cout << name << "'s Grade Chart\n";
cout << "---------------------------\n";
cout << setprecision(1) << fixed;
cout << "Grade for " << assignmentName[0] << setw(8) << grade[0] << endl;
cout << "Grade for " << assignmentName[1] << setw(8) << grade[1] << endl;
cout << "Grade for " << assignmentName[2] << setw(8) << grade[2] << endl;
cout << "\nYour average grade between those three assignments is: " << setw(1) << avg << endl;`
4

2 回答 2

0

而不是写:

"Grade for " << assignmentName[x] << setw[y] << grade(z)

写:

"Grade for " << setw[a]  << assignmentName[x] << setw[y] << grade(z)

在每种情况下,a都大于x 。也许这应该解决它。

的 a应该是 10 或 15 之类的东西。我希望它在那之后有效。试试看。

于 2017-09-23T04:14:42.120 回答
0

我评论说:“setw(N)在 N 比assignmentName每个之前的最大值大一点的地方再放置一个<< assignmentName。”

但转念一想它比这更有趣,所以我认为一个真正的答案是有序的。

首先,一些阅读材料:

关于std::leftstd::right

关于文档std::max

现在继续表演!

首先我们需要知道最大的任务名称有多大。

size_t max = 0;
for (const string & assn: assignmentName)
{
    max = std::max(max, assn.length());
    // You may need 
    //max = std::max(max, strlen(assn));
    // if you've been forced to resort to barbarism and c-style strings
}
max++; // one extra character just in case we get a really long grade.

有时这会变得更整洁。例如std::max_element可以消除我们用来获取最大赋值名称长度的循环的需要。在这种情况下,我们正在寻找字符串的大小,而不是字符串的词法顺序,所以我认为循环和std::max大脑更容易一些。

现在要格式化,我们打印名称左对齐和等级右对齐,名称填充max字符和等级 8 字符。

cout << "Grade for " << std::left << setw(max) << assignmentName[0] 
     << std::right << setw(8) << grade[0] << '\n' 
     << "Grade for " << std::left << setw(max) << assignmentName[1] 
     << std::right << setw(8) << grade[1] << '\n' 
     << "Grade for " << std::left << setw(max) << assignmentName[2] 
     << std::right << setw(8) << grade[2] << '\n';

请注意,它现在是一个大的cout. 这主要是为了演示目的,因为我认为它看起来更好。如果有的话,它并不能真正为您节省很多处理时间。节省时间的是缺少endls。endl实际上是一个非常昂贵的操作,因为它不仅会结束一行,而且还会刷新。它将流中缓冲的任何内容强制输出到底层媒体,在本例中为控制台。计算机处于最佳状态时,他们可以避免真正离开计算机,直到他们真的必须这样做。在屏幕上绘图比写入 RAM 或缓存​​要昂贵得多,所以在必要之前不要这样做。

于 2017-09-23T04:23:47.967 回答