解决使用{freopen与 getline}读取不同文件时产生的的问题

Posted leprechaun-kdl

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了解决使用{freopen与 getline}读取不同文件时产生的的问题相关的知识,希望对你有一定的参考价值。

读取单一文件

使用 freopen重定向。

用 getline逐行读取,处理。

#include <iostream>
#include <cstdio>
#include <cstring>

using namespace std;
string s;

int main()
{
    freopen("text1.in", "r", stdin);
    while (getline(cin, s)) {
        /* - code - */
    }
    fclose(stdin);
    return 0;
}

读取多个文件

基本方法同上。

特别注意:在读取完一个文件后,

使用 cin.clear()清空输入流。

否则可能会有 除第一个文件,其他文件无读入的现象。

2020-1-27-1:07 在读取处理两个 txt文本数据时产生该问题。

编译环境:
Using built-in specs.
COLLECT_GCC=g++
COLLECT_LTO_WRAPPER=e:/tio/dev-cpp/mingw32/bin/../libexec/gcc/mingw32/4.8.1/lto-wrapper.exe
Target: mingw32
Configured with: ../gcc-4.8.1/configure --prefix=/mingw --host=mingw32 --build=mingw32 --without-pic --enable-shared --enable-static --with-gnu-ld --enable-lto --enable-libssp --disable-multilib --enable-languages=c,c++,fortran,objc,obj-c++,ada --disable-sjlj-exceptions --with-dwarf2 --disable-win32-registry --enable-libstdcxx-debug --enable-version-specific-runtime-libs --with-gmp=/usr/src/pkg/gmp-5.1.2-1-mingw32-src/bld --with-mpc=/usr/src/pkg/mpc-1.0.1-1-mingw32-src/bld --with-mpfr= --with-system-zlib --with-gnu-as --enable-decimal-float=yes --enable-libgomp --enable-threads --with-libiconv-prefix=/mingw32 --with-libintl-prefix=/mingw --disable-bootstrap LDFLAGS=-s CFLAGS=-D_USE_32BIT_TIME_T
Thread model: win32
gcc version 4.8.1 (GCC)

编译命令:
g++ Name.cpp -o Name.exe

正确示例:

#include <iostream>
#include <cstdio>
#include <cstring>

using namespace std;
string s;

int main()
{
    freopen("text1.in", "r", stdin);
    while (getline(cin, s)) {
        /* - code - */
    }
    fclose(stdin);
    cin.clear();
    freopen("text2.in", "r", stdin);
    while(getline(cin, s)) {
        /* - code - */
    }
    fclose(stdin);
    // ...
    return 0;
}

以上是关于解决使用{freopen与 getline}读取不同文件时产生的的问题的主要内容,如果未能解决你的问题,请参考以下文章

3c++的getline与get

如何正确释放与 getline() 函数相关的内存?

Getline 只读取第一个单词

使用 cin.getline() 和 cin.get()

C++的面向行的输入:getline()与get()

C++的面向行的输入:getline()与get()