7.3.7  一般性格式定义

7.3.7 一般性格式定义

通常的格式标识一般包括skipws和unitbuf。一旦skipws格式标识被调用,读取数值时,会自动跳过起始空格;nounitbuf格式标识每次输出后,会清空output缓冲区。默认情况下,设置ios::skipws意味着读取数值时会跳过起始空格,因为数字之间的空格是无意义的,不需要读取。这也导致了使用“>>”时,无法读取空字符和空格字符(被忽略了)。

标识符ios::unitbuf用于控制output缓冲区。若ios::unitbuf被设置,即不使用缓冲装置,每次输出时均清空(flush)缓冲区。默认情况下,没有设立此标识,不过cerr和wcerr已预先设置它。

上述两个标识符均有其相反的形式,比如noskipws,nounitbuf。值得注意的是,要区别它们的不同含义。skipws代表着省略起始空格;noskipws代表着读取输入流中的空格,即不跳过起始空格,而是将其读出;unitbuf的默认状态字是nounitbuf,状态字unitbuf一旦被设置,缓冲区非空时会被处理(清除);而使用状态字nounitbuf时,每次输出结束后,并不清除输出缓冲区。

以上4种标识符的对应标识分别为ios::skipws和ios::unitbuf。设置和清除时使用相同的标识,可以使用操作符setiosflags()和resetiosflags(),还可以使用流cout的setf()函数和unsetf()函数。例如,

978-7-111-51399-5-Chapter07-71.jpg

上述代码的输出结果为:

978-7-111-51399-5-Chapter07-72.jpg