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