打印文件每行前的编号

  • 本文关键字:编号 文件 打印 c++
  • 更新时间 :
  • 英文 :


我制作了一个电话簿和添加用户的功能。我希望每一行前面都有数字,但是每一行前面的数字都是错误的。我添加了打印数字的代码,但它给出了一个每行都相同的大数字。我想让它像这样打印:

1 John Doe
2 Johnny Doe
3 Max Doe

现在,它打印的是:

1878003873 John Doe
1878003873 Johnny Doe
1878003873 Max Doe

我不知道这个数字是从哪里来的。

void addContact()
{
string Fname, Lname, Address, Contact, list, name, Fname2, Lname2, Address2, Contact2;
int counter, number;
cout << "Enter First Name: ";
getline(cin, Fname);
cout << "Enter Last Name: ";
getline(cin, Lname);
cout << "Enter Address: ";
getline(cin, Address);
cout << "Enter Contact Number: ";
getline(cin, Contact);
ifstream asd("number.txt");
while (asd >> counter >> Fname2 >> Lname2 >> Address2 >> Contact2)
{
number = counter;
}
ofstream adb("number.txt", ios::app);
number = number + 1;
adb << number << " " << Fname << " " << Lname
<< " " << Address << " " << Contact << endl;
}

假设您正在添加第一个用户。你认为number的值会是多少?

ifstream asd("number.txt");
while (asd >> counter >> Fname2 >> Lname2 >> Address2 >> Contact2)
{
number = counter;
}

因为它是你的第一个用户,所以while循环从来没有进入,所以number从来没有被初始化。因此你会看到垃圾数字。一旦第一个垃圾号出现,代码就会正确地为后面的每个数字加1。

要修复,只需添加这一点,使number总是得到一个初始值。

int counter, number = 0;

不是你问的,但我认为你应该关闭你的输入文件之前,你试着写新的用户

ifstream asd("number.txt");
while (asd >> counter >> Fname2 >> Lname2 >> Address2 >> Contact2)
{
number = counter;
}
asd.close(); // stop reading and close the input file
ofstream adb("number.txt", ios::app);
...

在同一个文件上同时打开一个读流和一个写流并不是一个好主意,即使在这种情况下它看起来确实有效。

最新更新