C ++ Я хочу, чтобы fscanf игнорировал символы новой строки, но не другие пробельные символы - PullRequest
0 голосов
/ 06 ноября 2018

В моей программе я хочу читать данные из файла символьно и сохранять их где-то, но я хочу игнорировать символы новой строки. Я пытался найти решение этой проблемы весь день. Когда я оставляю пробел перед% c, он игнорирует все пробелы, когда я использую такие вещи, как fscanf(fp, "%*[\n]", ch);, я не могу заставить его продолжить чтение со следующей строки. Или по какой-то причине он читает только последнюю строку. Может кто-нибудь, пожалуйста, помогите мне?

1 Ответ

0 голосов
/ 06 ноября 2018

Поскольку предполагается, что это вопрос C ++, как насчет решения iostream / boost :: ... :: filter_istream? Это дает вам полную пропускную способность iostreams (количество набираемых номеров и т. Д.)

 #include <boost/iostreams/device/file.hpp>
 #include <boost/iostreams/filtering_stream.hpp>
 #include <boost/iostreams/concepts.hpp>

 #include <iostream>
 #include <fstream>

 static const int NL = 0xa;
 class nl_input_filter : public boost::iostreams::input_filter {
 public:
     template<typename Source>
     int get(Source& src) {
         int c;
         while ((c = boost::iostreams::get(src)) != EOF && c !=   boost::iostreams::WOULD_BLOCK) {
            if(c != NL)
                break;
        }
        return c;
    }
 };

 int main()
 {
     std::ifstream fi("/tmp/bla");
     boost::iostreams::filtering_istream in;
     std::string s;
     in.push(nl_input_filter());
     in.push(fi);
    while ( in >> s )
    {
        std::cerr << s << std::endl;
    }
}
...