问题描述
if(role==2)
{
int arr;
ifstream record("total.txt");
record>>arr;
record.close();
string names[arr];
int age[arr];
ifstream file("names.txt");
ifstream file0("ages.txt");
for(int i=0;i<arr;i++)
{
getline(file,names[i]);
file0>>age[i];
}
for(int i=0;i<arr;i++)
{
cout<<names[i]<< " "<<age[i]<<endl;
}
}
这里我有 2 个文件,其中包含某人的姓名和年龄。文件名 total.txt 包含一个数字,即总人数。名为names.txt 和ages.txt 的苍蝇每行包含一个名字和一个年龄。
ages.txt: names.txt:
18 anil kumar
25 naman ojha
27 vishnu pandit
52 sangakara g
48 helen keller
我得到我上面写的代码的结果:
anil kumar 18
naman ojha 25
vishnu pandit 27
sangakara g 52
helen keller 48
我想要的结果:
anil kumar 18
naman ojha 25
vishnu pandit 27
sangakara g 52
helen keller 48
如何达到这个结果?欢迎提出新想法。
解决方法
for(int i=0;i<arr;i++)
{
std::cout << std::left << std::setw(32)
<< names[i] << " " << age[i] << std::endl;
}
left
确保以下数据左对齐,这意味着任何填充字符都将附加在输出数据之后。 setw
设置以下数据输出的宽度。如果格式化的数据少于这个数量,超出的部分用填充字符填充,默认为空格。如果格式化输出等于或长于字段宽度,则不会附加填充字符。数据格式化完成后,宽度重置为0,这意味着后面的数据输出不会扩展到之前指定的宽度。上面的“数据”是指在IO操作符之后立即插入流中的对象——上面代码中的names[i]
。
为了保证任何输入的正确列对齐,您可能还需要遍历 names
数组以找到名称字符串的最大长度并将其用作字段宽度。
int max_width = 0;
for(int i=0;i<arr;i++)
{
if (names[i].size() > max_width)
max_width = names[i].size();
}
for(int i=0;i<arr;i++)
{
std::cout << std::left << std::setw(max_width)
<< names[i] << " " << age[i] << std::endl;
}