微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如果从文件流式传输,如何确保数据正确缩进看看我的代码,它没有给出想要的结果

如何解决如果从文件流式传输,如何确保数据正确缩进看看我的代码,它没有给出想要的结果

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

如何达到这个结果?欢迎提出新想法。

解决方法

您可以使用 setwleft IO 操纵器:

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 举报,一经查实,本站将立刻删除。