首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

c++输入文件流ifstream用法详解

如果遇到错误—例如输入流遇到了文件末尾,对象的状态变为是失效,所有的后续输入操作都不能执行,直到错误纠正。...直到遇到截止字符,如果遇到截止字符,把它从流中取出来,然后丢弃(它不被存储,下一个操作的起点在它之后)函数调用前str 中的内容将被覆盖。...char c = std::cin.get(); std::cin.putback (c); 15,istream::unget istream& unget(); // 返回最后一次读取的字符到输入流...,类似putback() char c = std::cin.get(); std::cin.unget(); 16,istream::tellg 读取输入流中文件指针的位置,返回值可转化为 int。...读到文件末尾的时候, eofbit, failbit 同时被设置为1,所以可以使用bool()来判断流的状态。 当文件打开失败的时候failbit 设置为1,所以也能检测打开是否成功。

1.8K20

c++中istream类的超详细说明

(); //从输入流中读取一个字符并存储在引用参数__C中,如果遇到文件结束符,__C为eof(),返回this指针 __istream_type& get(char_type...& __c); //从输入流中读取字符存储在__s指向的内存中,直到输入流被读取完或者读到了__n-1个字符才返回,其中如果读取字符的过程中遇到了__delim所代表的字符,提前返回,也就是说...//从输入流中读取字符存储在__s指向的内存中,直到输入流被读取完或者读到了__n-1个字符才返回,其中如果遇到换行符,提前返回,从实现看,可见就是上面那个函数的终止字符是换行符...12个字符,read函数读取不会返回,知道读取12个字符为止。...而如果read函数换成readsome函数,就会直接返回,并不会等待输入,也就是目前缓冲区有多少那么读多少,没有也不等待。

1.3K30
您找到你想要的搜索结果了吗?
是的
没有找到

C++:32---IO库

这些值用来表示特定类型的IO条件,可以与运算符一起使用来一次检测设置多个标志 这些值用来表示特定类型的IO条件,可以与运算符一起使用来一次性检测设置多个标志 badbit: badbit表示系统级错误...通常情况下,一旦badbit被置,流就无法使用了 如果badbit被置检测流状态的条件会失败 failbit: 在发生可恢复错误后,failbit被置,如期望读取数值却读出一个字符等错误。...这种问题通常是可以修正的,流还可以继续使用 如果文件达到尾端,failbit会被置 如果failbit被置检测流状态的条件会失败 eofbit: 如果文件达到尾端,eofbit也会被置 如果eofbit...被置检测流状态的条件会失败 goodbit: goodbit的值为0,表示流未发生错误 查询流状态函数 在上面的图片中还定义了一组函数用来查询上面标志的状态 规则如下: 操作good()在所有错误均未置的情况下返回...如果open失败,那么流的failbit会被置

53030

【C++】输入输出流 ⑪ ( 文件流 | 二进制形式打开文件 | 二进制文件读取 | read 函数 | gcount 函数 | 二进制文件写出 | write 函数 | fail 函数 )

二进制文件简介 二进制文件中 的数据不是 字符数据 , 而是以 二进制形式 存储的 字节数据 , 有特定的格式 , 如 : PNG 头文件 , 有特定的文件头 , 数据 , 校验 , 使用 文本编辑器...输出 文件 ; 二、二进制文件读取 使用 istream 类的 read ostream 类的 write 函数 , 可以对二进制文件进行读写操作 , 函数原型如下 : istream& read(..., 实际读取的字节数需要调用 ifstream 的 gcount() 函数来获取 , 其函数原型如下 : streamsize gcount(); ifstream 的 gcount() 函数 返回一个...; 如果输入流没有发生错误 , 返回 false ; 如果输出流发生错误 , 返回 true ; 例如 : 无法打开文件写入数据失败 , fail() 函数将返回 true ; fail() 函数可以与其他...1.bin", ios::binary); // 如果 ofs 对象值为 0 , 说明文件打开失败 if (!

56010

C++IO流详解

_age); return 0; } 这段代码看上去没有什么问题,如果我们第二次输入的字符串过长,会导致程序崩溃,原因如下 : string内部会有一个 _Buf数组,当存储的字符串大小小于...15字节时,不会去堆上开辟空间存储字符串,会将字符串存储在 _Buf数组中,但无论第一次输入的字符串大小是大于15字节还是小于15字节,第二次如果输入过长,都会导致程序崩溃,原因在于第二次是用scanf...如果是 字符型字符串,空格( ASCII 码为 32 )无法用 cin 输入,字符串中也不能有空格。回车符也无法读入。如果想将字符串整行读取,则要使用getline()。...类型的对象,那么这里可以做逻辑条件值,源自于 istream 的对象又调用了 operator bool,operator bool 调用时如果接收流失败,或者有结束标志,返回 false。...多次数据类型转化时,一定要用 clear() 来清空,才能正确转化,**clear()不会将stringstream底层的string对象清空**。

59030

CC++开发基础——IO操作与文件流

(1).输入 get():读取单个字符。 read():读取字符数组。 (2).回退 unget():在读取的时候回退一个位置,将读取的前一个字符放回到流中。...如果当前位置是流的起始位置,调用unget()会失败。 putback():unget()一样支持回退,但是putback()可以指定放回的字符。...get:读取单个字符。 read:读取字符数组。 getline:读取整行字符。 readsome:读取若干数量的字符。 peek:预览下一个字符。 unget读取期间,回退一个字符。...状态相关的操作: good()、bad()、fail()、eof():前面已经讲过。 setstate:设置状态。 clear:清除状态。...状态相关的操作: good()、bad()、fail()、eof():前面已经讲过。 setstate:设置状态。 clear:清除状态。

21330

c++IO库之文件输入输出详细整理,建议赶紧收藏!!!

这些类型提供的操作与我们之前使用过的对象cincout的操作一样。特别是,我们可以用IO运算符(>)来读写文件,可以用getline从一个ifstream读取数据。...如果提供了一个文件名,open会自动被调用: ifstream in(ifile);//构造一个ifstream并打开给定文件 ofstream out;//输出文件流未关联到任何文件 定义一个输入流...的调用,虽然两个函数定义时指定的形参分别是istream&ostream&,但我们可以向他们传递fstream对象 ---- 成员函数openclose 如果我们定义了一个空文件流对象,可以随后调用...open失败,failbit会被置.failbit用来指出一个IO操作失败了因为调用open可能失败,进行open是否成功的检测是一个好习惯: if(out)//检查open是否成功,如果open成功...,我们就可以使用文件了 一旦一个文件流已经打开,它就保持与对应文件的关联.实际上,对一个已经打开的文件流调用open会失败,并会导致failbit被置.

66720

【C++】IO流

出错只是在流的状态字 state 中对应位置(置1),程序继续。 空格回车都可以作为数据之间的分格符,所以多个数据可以在一行输入,也可以分行输入。...如果是字符型字符串,空格(ASCII码为32)无法用 cin 输入,字符串中也不能有空格。回车符也无法读入。...>>,返回值是 istream 类型的对象,那么这里可以做逻辑条件值,源自于 istream 的对象又调用了operator bool(),operator bool() 调用时如果接收流失败,或者有结束标志...() 不会将 stringstream 底层的 string 对象清空; 可以使用 s. str("") 方法将底层 string 对象设置为 "" 空字符串; 可以使用 s.str() 将让 stringstream...返回其底层的 string 对象; stringstream 使用 string 类对象代替字符数组,可以避免缓冲区溢出的危险,而且其会对参数类型进行推演,不需要格式化控制,也不会出现格式化失败的风险

14510

使用getline()从文件中读取一行字符串

我们知道,getline() 方法定义在 istream 类中,而 fstream ifstream 类继承自 istream 类,因此 fstream ifstream 的类对象可以调用 getline..., char delim); 其中,第一种语法格式用于从文件输入流缓冲区中读取 bufSize-1 个字符到 buf,遇到 \n 为止(哪个条件先满足就按哪个执行),该方法会自动在 buf 中读入数据的结尾添加...第二种语法格式第一种的区别在于,第一个版本是读到 \n 为止,第二个版本是读到 delim 字符为止。\n delim 都不会被读入 buf,但会被从文件输入流缓冲区中取走。...注意,如果文件输入流中 \n delim 之前的字符个数达到超过 bufSize,就会导致读取失败。...再次运行程序,其输出结果为: http:// 另外,如果读取文件中的多行数据,可以这样做: #include #include

6810

从零开始学C++之IO流类库(二):文件流(fstream, ifstream, ofstream)的打开关闭、流状态

对这些模式添加ate模只会改变文件打开时的初始定位,在第一次 写之前,将文件定位于文件末尾处。...(out) 4、当打开方式中不含有ios::ateios::app选项时,文件指针被自动移到文件的开始位置,即字节地址为0的位置。...7、当文件同时以inout打开时不会清空 8、如果只使用out模式,而不指定in模式,文件会清空现有数据。...9、如果同时指定了out与app,不会清空 10、如果打开文件时指定了trunc模式,则无论是否同时指定了in模式,文件同样会被清空 三、流状态 ?...对应于这个标志字各状态,ios类还提供了以下成员函数来检测设置流的状态: bool rdstate();             //返回流的当前状态标志字 bool eof();

2.8K00

标准 IO 库那些事儿

不过发现缓冲类型和缓冲区 buffer 确实起作用了: 设置为全缓冲的流 fprintf 不会立即输出,需要使用 fflush 冲洗一下 由于 stdout stderr 使用了一块缓冲区,同样的信息会被分别输出一次...回过头来观察程序的第一次输出,对于 stdout 的 printf 输出,当读取 stdin 无缓冲文件 fp3 时,都会被冲洗!...返回值表示读写的元素个数,如果与 nitems 一致则无错误发生;如果小于 nitems,对于读,需要通过 feof ferror 来判断是否出错,对于写,铁定是出错了。...如果是 32 系统,还需要定义 _LARGEFILE64_SOURCE 使能 64 接口;如果是 64 系统,定不定义 _FILE_OFFSET_BITS=64 都行,因为默认已经指向 64 的了...tempnam,如果没有将 XXXXXX 放在文件名末尾,末尾的 X 字符数不足 6 个,直接返回参数非法 (22) 的错误。

1.4K20

IO类型

从一个给定的istream读取一行数据,存入一个给定的string对象中 IO类 头文件 IO库类型 iostream istream,wistream从流读取数据ostream,wostream向流写入数据...读写string IO对象没有拷贝赋值 定义函数时不能将形参设置为流类型 进行IO操作的函数通常使用引用方式传递返回流 因为读写一个IO对象会改变其状态,因此传递返回的引用不能是const类型的...一个流一旦发生错误,其后续的IO操作都会失败 #include using namespace std; istream& read_print(istream &s) { int...ofstream:向文件写入数据 fstream:读写操作都能进行 每一个文件流对象都定义了一个名为open的成员函数,它完成了一些系统相关的操作,来定位给定的文件,并视情况打开为读写模式 一旦一个文件流已经打开...对一个已经打开的文件流调用open会失败,并会导致failbit被置,随后试图使用文件流的操作都会失败 ** ifstream、ofstream、fstream对象上的操作,以下操作都适用 操作 说明

64410

c++中ifstream及ofstream超详细说明

(std::move(__rhs)), _M_filebuf(std::move(__rhs....函数,可以看到它的析构函数是什么都没有做的,所以ifstream需要显式的调用close函数,如果不显式调用的话,filebuf对象也会自动调用析构函数关闭文件,如果filebuf调用close失败,...,这里不再多说,主要是close,我们可以看到它调用失败以后,会将当前流状态置为失败,所以标准的做法,还是显式的调用一下close函数比较好。...总之,我们要记住,如果要从文件读取数据,那么使用ifstream,如果要将数据写到文件,那么使用ofstream,如果既要读又要写,那么使用fstream。...ios_base::in 以只读方式打开文件,若文件存在默认从最开始读取如果文件不存在,文件会打开失败 ios_base::out 以只写方式打开文件,若文件存在,清空文件内容,若文件不存在,

1.1K30

C++系列-第1章顺序结构-5-输入类cin

最常用的方法是 cin >>,它用于读取一个多个变量的值,并根据空格、制表符换行符来分隔输入的字符序列。 下面是一个简单的案例,程序会要求用户输入两个整数,然后输出这两个整数的。...return 0; } 输出为: 在使用 cin >> 其他读取方法时,如果输入格式不正确出现错误异常,程序可能会抛出异常读取失败。...1. cin.fail(): 这个函数检查最近的输入操作是否失败如果最近的输入操作失败(例如,因为输入格式不正确遇到了文件结束符),返回 true;否则返回 false。...它返回一个 int 类型的值,代表下一个字符的 ASCII 码,如果没有更多输入返回 -1。...如果用户输入了一个有效的整数,程序会将其加到 sum 变量上。如果输入无效,程序会清除错误标志,忽略剩下的输入,并退出循环。最后,程序输出所有有效整数的

12010

C++PrimerPlus学习之输入,输出和文件

,值右对齐 使用cin进行输入  流状态  成员描述eofbit如果到达文件尾,设置为1badbit如果流被破坏,设置为1;例如,文件读取错误failbit如果输入操作未能读取预期的字符输出操作没有写入预期的字符...,设置为1goodbit另一种表示0的方法good()如果流可以使用(所有的都被清除),返回trueeof()如果eofbit被设置返回truebad()如果badbit被设置返回truefail...()如果badbitfailbit被设置返回truerdstate ()返回流状态exceptions ()返回一个掩码,指出哪些标记导致异常被引发exceptions(isostate ex)...=0,引发异常basic_ios::failuresetstate(iostate s)调用clear(rdstate() | s).这将设置与s中设置对应的流状态,其他流状态保持不变 I/O...如果在返回值(exceptions())中某一设置,而在当前状态中对应也被设置clear()将引发ios_base::failure异常。

60000

C++017-C++文件读写应用

\n"; } 文件操作-读取文本文件 包含头文件:#include 类:ifstream ifstream打开文件的模式(方式): 对于ifstream,如果文件不存在,打开文件失败...如果以二进制方式打开文件,写读都不会进行转换。 4)在Linux平台下,以文本二进制方式打开文件,系统不会做任何转换。...\n"; } 文件操作-读取二进制文件 包含头文件:#include 类:ifstream ifstream打开文件的模式(方式): 对于ifstream,如果文件不存在,打开文件失败...fstream类的缺省模式是ios::in | ios::out,如果文件不存在,创建文件;但是,不会清空文件原有的内容。...3)failbit 当输入流操作未能读取预期的字符时,将设置failbit(非致命错误,可挽回,一般是软件错误,例如:想读取一个整数,内容是一个字符串;文件到了未尾)I/O失败也可能设置failbit

32830

《C++Primer》第八章 IO库

IO对象无拷贝或者赋值 我们不能拷贝对IO对象赋值,因此我们也不能将形参返回类型设置为流类型。进行IO操作时通常是以引用方式传递返回流。...goodbit:指出流未处于崔武状态 s.eof():若流s的eofbit置返回true s.fail():若流s的failbitbadbit置返回true s.bad():若流...s的badbit置返回true s.good():若流s处于有效状态,返回true s.clear():将流s的所有条件状态复位,将流的状态设置为有效,返回void s.clear(...到达文件结束时,eofbitfailbit都会被置 goodbit:值为0表示流未发生错误,只要badbit、eofbitfailbit中任一个被置表示发生错误 使用fail()good...// 输出文件流未与任何文件相关联 out.open(ifile + ".copy"); // 打开指定文件 // 如果调用open失败的话,`failbit`会被置 if (out) // 检查open

63710

【C++】C++ 中的 IO 流

如果数据输出错误,必须在 enter 之前 Backspace 并修改,如果回车键按下就无法挽回了,只能等待 cin 将输入缓冲区中的数据读取完毕后,才要求输入新的数据。...出错只是在流的状态字 state 中将对应位置 (置1),程序并不会被终止。 C语言输入规则一样,空格回车都可以作为数据之间的分格符,所以多个数据可以在一行输入,也可以分行输入。...如果是字符型字符串,空格无法用 cin 输入,因为其会被识别为数据分隔符,需要使用 getline 函数。...>>,该函数返回一个 istream类型的对象;同时,因为 istream 类中还重载了 bool,所以 istream 对象会去调用 operator bool函数;operator bool 调用时如果接收流失败...stringstream 使用 string 类对象代替字符数组,可以避免缓冲区溢出的危险 (自动扩容),而且其会对参数类型进行推演,不需要格式化控制,也不会出现格式化失败的风险,因此使用更加方便安全

29930

【C++】C++11线程库 C++IO流

每个线程会先将内存中的共享资源值拿到,并将这个值设置为预期原值,然后对其进行修改得到新值,然后对比当前内存中的共享资源值是否与预期原值相同,如果相同,则将新值写回内存,如果不相同,写回操作失败,重新读取内存的值...and set更加形象一些,拿线程的预期原值当前内存位置中的值进行compare,如果相同,则将修改后的新值set到内存里面,如果不相同,此次CAS操作失败,重新while循环执行新的CAS操作。...光防止还是不够,推荐的做法就是不要用string对象来进行二进制写入读取,而是直接使用char数组来进行二进制读取写入,这一定不会出现问题。...在进行多次转换时,需要调用clear()函数将状态标志设置为允许进行新一轮的转换,clear并不会清空stringstream内部维护的string对象内容,所以如果仅调用clear()接口重置标志的话...所以如果想要进行全新一轮的转换,则可以先调用str()接口将string底层内容设置为空(只有’\0’),然后再调用clear重置状态标志,当然顺序也可以反过来。

22920
领券