如何使用cout获得“绝对定位”列,左对齐文本并右对齐数字?
#include <iostream>
#include <iomanip>
using namespace std;
struct Human {
char name[20];
char name2[20];
char name3[20];
double pts;
};
int main() {
int i;
Human myHumen[3] = {
{"Mr", "Alan", "Turing", 12.25},
{"Ms", "Ada", "Lovelace", 15.25},
{"Sir", "Edgar Allan", "Poe", 45.25}
};
cout << "Name1" << setw(22) << "Name2" << setw(22) << "Name3" << setw(22) << "Rating" <<endl;
cout << "-----------------------------------------------------------------------\n";
for(i = 0; i < 3; i++) {
cout << myHumen[i].name << setw(22) << myHumen[i].name2 << setw(22) << myHumen[i].name3 << setw(20) << myHumen[i].pts << endl;
}//this didn't do nice printouts, with leftalign for text and rightalign with numbers
}
答案 0 :(得分:6)
您使用“左”和“右”操纵器:
cout << std::left << std::setw(30) << "This is left aligned"
<< std::right << std::setw(30) << "This is right aligned";
包含文字+数字的示例:
typedef std::vector<std::pair<std::string, int> > Vec;
std::vector<std::pair<std::string, int> > data;
data.push_back(std::make_pair("Alan Turing", 125));
data.push_back(std::make_pair("Ada Lovelace", 2115));
for(Vec::iterator it = data.begin(), e = data.end(); it != e; ++it)
{
cout << std::left << std::setw(20) << it->first
<< std::right << std::setw(20) << it->second << "\n";
}
打印哪些:
Alan Turing 125
Ada Lovelace 2115
答案 1 :(得分:-1)
这稍微不受欢迎,但你可以使用printf来实现这种快速程序。格式化字符串更容易理解和使用(给某人同时浏览iostream和printf)。
#include <cstdio>
#include <iostream>
#include <iomanip>
#include <string>
struct Human {
char name[20]; // consider using std::string
char name2[20];
char name3[20];
double pts;
};
int main() {
using namespace std;
Human people[3] = {
{"Mr", "Alan", "Turing", 12.25},
{"Ms", "Ada", "Lovelace", 15.25},
{"Sir", "Edgar Allan", "Poe", 45.25}
};
printf("%-22s%-22s%-22s%20s\n", "Name1", "Name2", "Name3", "Rating");
cout << string(22 * 3 + 20, '-') << '\n';
for (int i = 0; i < 3; i++) {
Human const& h = people[i];
printf("%-22s%-22s%-22s%20f\n", h.name, h.name2, h.name3, h.pts);
}
return 0;
}
安全(默认情况下,请参阅std :: sync_with_stdio)来混合使用cout和printf,一个好的编译器也可以为你检查格式字符串的类型(-Wall in gcc)。