我刚刚在我的uni中使用了C ++,我们必须制作一个电话簿程序,它使用txt文件作为联系人的输入/输出。 我的问题是,在重新启动程序后,(Ergo,将结构数组刷新到文件中并将其读回。)结构填充不正确。名称char数组保留为空,地址采用name-value,电话号码数组尝试获取地址。我必须在名称数组中存储名字和姓氏,用空格分隔,并将完整地址存储到它的char数组中。
ifstream ifile;
ifile.open("phonebook.txt");
while(ifile.peek()!=EOF)
{
string temp;
ifile>>b[a].id;
getline(ifile, temp);
for(int i = 0;i < temp.length();i++)
b[a].name[i] = temp[i];
temp.clear();
getline(ifile, temp);
for(int g = 0;g < temp.length();g++)
b[a].address[g] = temp[g];
temp.clear();
ifile>>b[a].number;
a++;
}
ifile.close();
结构定义为:
struct derp
{
int id;
char name[25];
char address[25];
char number[10];
};
derp b[100];
虽然我知道使用字符串更好,而且更容易,但如果可能的话,我想用char数组来做。
编辑: 文本文件目前只是一个测试/占位符:
1
Todor Penchev
Sevlievo, BG
0854342387
答案 0 :(得分:0)
读取一个数字并没有消除额外的换行符,所以你需要额外的getline来摆脱它们。
fstream ifile;
ifile.open("phonebook.txt");
a = 0;
while(ifile.peek()!=EOF)
{
string temp;
ifile>>b[a].id;
cout << "Id=:" << b[a].id << endl;
getline(ifile, temp); // Read end of line
getline(ifile, temp);
cout << "name=:" << temp << endl;
for(int i = 0;i < temp.length();i++)
b[a].name[i] = temp[i];
temp.clear();
getline(ifile, temp);
cout << "address=:" << temp << endl;
for(int g = 0;g < temp.length();g++)
b[a].address[g] = temp[g];
temp.clear();
ifile>>b[a].number;
getline(ifile, temp); // Read end of line
cout << "number=:" << b[a].number << endl;
cout << b[a].id << endl << b[a].name << endl << b[a].address << endl << b[a].number << endl;
a++;
}
ifile.close();