C 初学者:如何防止表中的文本将任何文本推向其右侧
C++ Beginner: How do I prevent the text in my table from pushing any text to the right of it?
我正在为我的基础知识制作一个非常基本的程序,并且我的所有工作都按预期工作了98%。
此程序以三个成绩的名称,平均它们的名称,并将它们输出到表中,但是由于assignmentName[]
与grade[]
的代码行相同,因此将grade[]
推到正确的确定用户输入的字符数量。问题的屏幕截图
这是我目前为表格写的代码:
cout << "___________________________n";
cout << name << "'s Grade Chartn";
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;`
我发表了评论,"将另一个 setw(N)
放在每个 << assignmentName
之前最大的 assignmentName
。"
,但第二个认为这比这更有趣,所以我认为一个真正的答案是按顺序进行的。
首先,一些阅读材料:
std::left
和std::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
。这主要是出于演示目的,因为我认为它看起来更好。在处理时间内,它并不能为您节省很多(如果有的话)。节省时间的是缺乏endl
s。endl
实际上是一个非常昂贵的操作,因为它不仅结束了一条线,而且还会冲洗。它迫使在这种情况下,在溪流中被缓冲到基础媒体的任何游戏机。当计算机能够避免真正离开计算机之前,直到真正的计算机才能达到最佳状态。绘制到屏幕上比写入RAM或缓存要贵,所以不要这样做。
而不是写作:
"Grade for " << assignmentName[x] << setw[y] << grade(z)
写:
"Grade for " << setw[a] << assignmentName[x] << setw[y] << grade(z)
其中 a 在每种情况下都大于 x 。也许应该解决它。
您的 a 应该是10或15之类的东西。我希望在那之后起作用。尝试。
- 在处理任何字符大小的模板中使用字符串文本
- 我想使用 "cout" 命令慢慢打印文本,但我真的找不到任何解决方案
- 将文本文件读取到2D数组中,但数组开始为超过数组[39][]的任何内容输出胡言乱语
- 整数文本太大,无法用任何整数类型表示--C++
- 是否有任何方法可以在用户输入文本时读取字符
- 打开任何文本文件
- 为什么此代码只能识别文本文件中的第一行?输入任何大于 1 的数字都会返回"Atomic Number Not Found"
- C 初学者:如何防止表中的文本将任何文本推向其右侧
- 读取 C++ 中的文本文件不显示任何输出
- C++为什么 setWindowText 不显示任何文本?
- 有没有任何方法可以从C++中的文本中提取URL
- 是否有任何中间件/库可以将二进制或文本数据从64位转换为32位
- 使用c++在opencv中检测图像中任何文本的位置
- 使用C++或任何windows脚本语言格式化文本数据
- 制作参数化用户定义文本的任何方法
- 我的C++从文本文件读取的程序无法正常工作,但我没有看到任何代码错误?
- C++ 中任何基数中的整数文本
- C++中的Regex,从正则表达式中获取文本任何部分的字符串
- 读取文本文件的任何头文件与平台无关
- 如何将文件的路径(或任何文本)显示/附加到编辑框中?(C++ Win32 API)