以正确的模式打印数据

时间:2015-01-21 17:30:01

标签: c++

我编写了一个遍历文本文件并读取所有数据并将其打印出来的函数,但是显示数据的格式是错误的,它只是逐行输出数据,如下所示:

 james
 c 18 6 endah regal
 male
 0104252455
 rodgo.james
 kilkil

我想要显示的数据是这样的(目前还没有发生):

 Name : james
 Address : c 18 6 
 Gender : Male 
 Contact : 0104252455
 Username : rodgo.james
 Password : kilkil

这是函数:

 int molgha() {

    ifstream in("owner.txt");

    if (!in) {
        cout << "Cannot open input file.\n";
        return 1;
    }

    char str[255];

    while (in) {

        in.getline(str, 255);  // delim defaults to '\n'
        if (in) cout << str << endl;

    }

    system("pause");
    in.close();

  }

请记住,此文本文件包含注册到系统的所有者的记录,因此我们可能需要打印出具有相同模式的3组所有者数据而没有任何错误,因此显示数据的最佳方式是什么?像那样不断?

4 个答案:

答案 0 :(得分:1)

您没有在代码中打印出所需的名称,地址等标签。你有两个选择 -

1)在实际文件本身的数据之前写出标签,并按原样保留打印代码 2)有一个带有成员名称,地址等的结构或类,以及一个打印内容的函数

struct FileEntry{
  string name;
  string address;
  .
  .
  .

  void printContents(){
    cout << "Name: " << name << endl;
    cout << "Address: " << address << endl;
    // etc etc
  }
}

如果你想在每个文件中包含不同数量的记录,只需在文件顶部放一个数字,即如果文件包含100条记录,则将100作为第一条数据读入并在处理中使用它< / p>

int numRecords;

ifstream in;

if(in.open("owners,txt")){
  numRecords << in;

 for(int record = 0; record < numRecords; records++){
   //read the info and output it here   
 }

答案 1 :(得分:1)

您希望存储输出名称,如下所示:

std::vector<std::string> names { "Name", "Address", "Gender", "Contact", "Username", "Password" };

带上一个交互者:

auto it = names.begin();

并在while循环中打印:

if (in) cout << *it++ << " : " << str << endl;

答案 2 :(得分:0)

只需添加一系列标签,然后根据您从文件中获取的行打印它们。

const string labels[6] = {
    "Name", "Address", "Gender", "Contact", "Username", "Password"
};

int i = 0;
while (in) {
    in.getline(str, 255);  // delim defaults to '\n'
    if (in) {
        if (i == 6) i = 0;
        cout << labels[i++] << " : " << str << endl;
    }
}

答案 3 :(得分:0)

所以重新陈述你的问题:

如何在输出中添加名称:,地址:等字段。

我建议采用以下方法:

在静态数组中声明字段名称:

const char* fieldNamesArray[6] = { "Name","Address","Gendre", "Contact","Username","Password"};

在您的读/写函数中,使用每个非空行并假设所有条目都有6个字段,并且所有时间都按相同的顺序排列:

int curField=0;
while(in)
{
    in.getLine(str,255);
    if (strlen(str)>0)
    {
        cout<< fieldsNamesArray[curField] << " : " << str;
        curField++;
    }
    if (curField>=6)
    {
       curField=0;
    }
}