ko đọc được là vì name
có tới 3 tiếng. re >> name
chỉ đọc được Phan
, tiếp theo nó đọc Trong
vào day
là số nguyên ko được nên cả dòng nó fail, ko in ra gì cả
viết lại cho kĩ 1 tí :V
#include <cstdlib>
#include <fstream>
#include <iostream>
#include <sstream>
#include <stdexcept>
void docfile(const std::string& filename)
{
std::cout << "READ FILE.........\n";
std::ifstream ifs{filename};
if (!ifs)
{
std::cerr << "Cannot open file `" << filename << "`\n";
std::exit(1);
}
for (std::string line; std::getline(ifs, line);)
{
std::string name, sex;
int day, month, year;
float one, two;
std::istringstream iss{line};
for (std::string token; iss >> token;)
{
try
{
day = std::stoi(token);
break;
}
catch (const std::exception& ex)
{
name += token + ' ';
}
}
name.pop_back(); // bỏ khoảng cách thừa sau cùng khi += token + ' '
iss >> month >> year >> sex >> one >> two;
std::cout << "\n"
<< name << "\n"
<< day << "/" << month << "/" << year << "\n"
<< sex << "\n"
<< one << " " << two << "\n";
}
}
int main()
{
docfile("final.txt");
}
đọc vào từng dòng getline(ifs, line)
, rồi biến dòng đó thành 1 input string stream để đọc vào các biến kia. Vì ko có ký tự đặc biệt gì ngăn cách name
với day
nên đành phải đọc từ từ từng từ 1 iss >> token
rồi thử chuyển token đó thành số nguyên day = stoi(token)
nếu gặp lỗi thì thêm từ đó vào name
vì chưa phải là day
. nếu chuyển thành int
thành công thì break ngừng đọc vì mấy token phía sau day
đọc vào dễ dàng iss >> month >> year >> sex >> one >> two