我得到了一个52行的文本文件,并被要求读取该文件,将值存储到一个数组中,并将该数组中的值返回一行以模拟一个相册。
来自文本文件“ cd.txt”的行:
Pantera
Cowboys From Hell
1990
Megadeath
Rust in Peace
1990
Anthrac
Worship Music
2011
显示文件内容的代码:
void displayCollection()
{
string album[17][3], myArray[52];
string line;
int loop = 0, loop1 = 0, loop2 = 1, loop3 = 2;
ifstream myfile("cd.txt");
while (getline(myfile, line)){
myArray[loop] = line;
loop += 1;
}
myfile.close();
cout << "\nArtist\t\t\tTitle\t\t\tYear\n" << endl;
for (int i = 0; i < 17; i++){
album[i][0] = myArray[loop1];
album[i][1] = myArray[loop2];
album[i][2] = myArray[loop3];
cout << album[i][0] << album[i][1] << album[i][2] << endl;
loop1 += 3;
loop2 += 3;
loop3 += 3;
}
}
如何打印格式:
Artist Title Year
Pantera Cowboys From Hell 1990
Megadeath Rust in Peace 1990
Anthrac Worship Music 2011
实际打印的内容:
Artist Title Year
1990oys From Hell
1990 in Peace
2011hip Music
鉴于症状和您的代码,这只能由文件编码引起,更确切地说是由line break encoding:
结果,您的每个字符串都有一个结尾的CR字符(即'\ r',即0x0D
)。显示它会导致光标移动该行的开头,以便下一个字符串覆盖前一个字符串。当然,当您选择endl
时,您将跳至下一行。
解决方案:删除尾随的0x0D:
while (getline(myfile, line)){
if (line.length()>0 && line[line.length()-1]=='\r')
line.pop_back();
myArray[loop] = line;
loop += 1;
}