如何解决如果从文件流式传输,如何确保数据正确缩进看看我的代码,它没有给出想要的结果
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;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。