01/10/2018, 09:13

Cách đọc file bằng fstream bỏ qua dấu cách

ngữ cảnh: ta có 1 file với 2 cột data như hình.
123 222225555 222 22555555 1.1 445666 122 235.6
file sau chỉ đọc theo hàng. làm sao để tách 2 thần phần của 1 dòng trong mổi lần đọc.

rogp10 viết 11:19 ngày 01/10/2018

Mỗi dòng hai con số thì đọc như bt hay đọc, ko cần phân giải

明玉 viết 11:16 ngày 01/10/2018

Cứ cout mà đọc bình thường, gặp khoảng trắng hoặc dấu xuống dòng là cout tự dừng, gọi cout tiếp thì nó đọc giá trị tiếp.

Thanh viết 11:16 ngày 01/10/2018

nó đọc nguyên cả hàng luôn. mình muốn mổi lần đọc 1 số thôi

Quốc Huy viết 11:15 ngày 01/10/2018

fileinput >> temp;
hoặc : getline(fileinput, temp, " ");

Thanh viết 11:25 ngày 01/10/2018

getline(fileinput, temp, " ");

Không được nhé bạn. sai cú pháp

Thanh viết 11:25 ngày 01/10/2018

Bạn nói trừu tượng quá. cho mình xem code bạn đi

明玉 viết 11:27 ngày 01/10/2018

Code gợi ý:

#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;

int main()
{
   ifstream fileInput("input.txt");
   vector<double> inputs;
   double input;
   while (true)
   {
      fileInput >> input;
      if (fileInput.good() == true)
         inputs.emplace_back(input);
      else break;
   }
   fileInput.clear();
   for_each(inputs.begin(), inputs.end(), [](double item) {
      cout << item << ' ';
   });
   cout << '\n';
   system("pause");
   return 0;
}
viết 11:19 ngày 01/10/2018

if (fileInput.good() == true)

code này là gì đây…

   double input;
   while (true)
   {
      fileInput >> input;
      if (fileInput.good() == true)
         inputs.emplace_back(input);
      else break;
   }

nguyên cái đống này viết 1 dòng là đủ rồi:

for (double input; fileInput >> input; inputs.emplace_back(input));
明玉 viết 11:23 ngày 01/10/2018

Bạn cho mình cái tài liệu chỉ ra tại sao làm được như vậy được không

viết 11:16 ngày 01/10/2018

mấy cái này là trick thôi, đọc code người khác nhiều thì thấy rồi chôm về làm của mình

vd std::cin >> … thì trả về cin, nhưng bản thân cin nó cũng có thể cast (implicit) thành bool true nếu nó còn đọc tiếp được, hoặc false nếu trước đó đọc thất bại, vậy nên có thể để cin >> n vô làm điều kiện dừng vòng lặp đọc số: while (cin >> n) s += n; hiểu là khi nào còn đọc n được từ cin thì làm cái gì đó với n.

ở đây mất công tạo 1 biến tạm thời input làm main mất đi 1 tên biến input, uổng, có thể bỏ vô trong vòng for khi khởi tạo, kết thúc vòng for thì nó cũng biến mất, rất phù hợp:
for (double n; cin >> n; ) s += n;

nếu phần thân của for chỉ có 1 dòng thì bỏ nó vào phần thứ 3 của vòng for luôn, hoặc cứ để nó ở trong thân vòng for, tùy sở thích thôi
for (double n; cin >> n; s += n);

明玉 viết 11:14 ngày 01/10/2018

Cám ơn bạn, hóa ra cục ifstream (và các loại stream khác) đều đã được overload ép kiểu bool đầy đủ

Bài liên quan
0