我编写了一个遍历文本文件并读取所有数据并将其打印出来的函数,但是显示数据的格式是错误的,它只是逐行输出数据,如下所示:
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组所有者数据而没有任何错误,因此显示数据的最佳方式是什么?像那样不断?
答案 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;
}
}