用C++排列文本输出
Line up text output in C++
所以我有一个从文本文件读取并输出到另一个文本文件的程序。这是它读取的文件文本(包括格式):
Duckey Donald 85
Goof Goofy 89
Brave Balto 93
Snow Smitn 93
Alice Wonderful 89
Samina Akthar 85
Simba Green 95
Donald Egger 90
Brown Deer 86
Johny Jackson 95
Greg Gupta 75
Samuel Happy 80
Danny Arora 80
Sleepy June 70
Amy Cheng 83
Shelly Malik 95
Chelsea Tomek 95
Angela Clodfelter 95
Allison Nields 95
Lance Norman 88
在程序中,它将这些元素中的每一个添加到数组中的一个结构中;然后计算等级并打印。
cout << "Student Name Test Score Grade" << endl;
for (int studentNumber = 0; studentNumber < STUDENT_NUMBER; studentNumber++){
cout << students[studentNumber].studentLName << ", "
<< students[studentNumber].studentFName << " "
<< students[studentNumber].testScore << " "
<< students[studentNumber].grade << endl;
}
所需输出如下:
Student Name Test Score Grade
Donald, Duckey 85 B
Goofy, Goof 89 B
Balto, Brave 93 A
Smitn, Snow 93 A
Wonderful, Alice 89 B
Akthar, Samina 85 B
Green, Simba 95 A
Egger, Donald 90 A
Deer, Brown 86 B
Jackson, Johny 95 A
Gupta, Greg 75 C
Happy, Samuel 80 B
Arora, Danny 80 B
June, Sleepy 70 C
Cheng, Amy 83 B
Malik, Shelly 95 A
Tomek, Chelsea 95 A
Clodfelter, Angela 95 A
Nields, Allison 95 A
Norman, Lance 88 B
Highest Test Score: 95
Students having the highest test score:
Green, Simba
Jackson, Johny
Malik, Shelly
Tomek, Chelsea
Clodfelter, Angela
Nields, Allison
所以基本上我的问题是。。。有没有办法让测试分数列的整数像我上面想要的输出一样排列
解决方案
int colWidth = 20;
for (int studentNumber = 0; studentNumber < STUDENT_NUMBER; studentNumber++){
string s = students[studentNumber].studentFName + ", " + students[studentNumber].studentLName;
int size = s.size();
cout << s << std::string(colWidth - size, ' ')
<< students[studentNumber].testScore << " "
<<
您可以手动用空格填充字符串,如:
#include <string>
#include <iostream>
int main()
{
std::string first("John");
std::string last("Smith");
std::string full = last + ", " + first;
int colWidth = 20;
std::cout << "12345678901234567890n"
<< full << std::string(colWidth - full.size(), ' ')
<< "aligned after 20 charactersn";
return 0;
}
输出:
12345678901234567890
Smith, John aligned after 20 characters
如果你计算打印的字符数,这将适用于左对齐你的文本。
对于正确的证明,std::setw
和<iomanip>
可以很好地工作。与其他流操纵器不同,std::setw
不具有粘性,因此它只会修改您的下一个即时输出。
#include <string>
#include <iostream>
#include <iomanip>
int main()
{
std::string s("ABCDE");
int colWidth = 20;
std::cout << "12345678901234567890n";
std::cout << std::setw(colWidth) << s << "n";
return 0;
}
打印
12345678901234567890
ABCDE
综合起来,我会左对齐第一列,右对齐第二列和第三列。
#include <string>
#include <iostream>
#include <iomanip>
int main()
{
std::string first("John");
std::string last("Smith");
std::string full = last + ", " + first;
int score = 100;
std::string grade("A");
std::cout << "123456789012345678901234512345n"
<< full << std::string(20 - full.size(), ' ')
<< std::setw(5) << score
<< std::setw(5) << grade << "n";
return 0;
}
打印:
123456789012345678901234512345
Smith, John 100 A
您可以这样更改代码:
#include <iomanip>
cout << "Student Name Test Score Grade" << endl;
for (int studentNumber = 0; studentNumber < STUDENT_NUMBER; studentNumber++){
cout << setiosflags(ios::left) << setw(29) << setfill(' ')
<< students[studentNumber].studentLName + ", " + students[studentNumber].studentFName
<< setw(8) << students[studentNumber].testScore
<< students[studentNumber].grade << endl;
}
其中29和8是根据您不期望的输出格式计算的,您可以根据需要进行更改。
相关文章:
- C++ 以相反的顺序输出文本文件
- 如何在不移动C 中的光标坐标的情况下输出文本以控制特定坐标
- 输出文本文件的位置
- 从输入复制到输出文本文件
- 输入和输出文本文件
- 您如何在输出文本的同时接受用户输入
- 如何从随机数中输出文本
- 使用读取系统调用C++输出文本
- 输出文本C++
- 将输出文本与 cout 对齐到右侧
- 如何在不使用cout/printf的情况下输出文本在cpp和c中
- 用户在输出文本时输入到控制台
- C++每x次输出文本
- outFile C++未写入输出文本
- C++:将输出文本格式化为.doc/.docx/.rtf(第2部分)
- 将输出文本格式化为.doc/.docx
- 从长期运行的控制台应用程序(C++)输入和输出文本
- 主函数不输出文本文件行
- 输出文本文件数据到字符数组
- 如何在c++中输出文本到打印机