输出排版问题

一般也就是水平制表了,c上建议的是用’\t’直接跳至下一个字节(tab),不过亲试好像不怎好用,因为一个字节是8个bit,如果字符串超过8位(换作汉字就是只要达到4个汉字),那么光标就会在输出这串字符的同时已经到达了下一个字节,再经过’\t’就是再跳到下一个字节,这样就会导致排版失败(如下),其实这种出错的概率太大了,所以排版的话不要使用’\t’,最好用cout.width()或者setw()直接修改字符串站的地方就好。
C++包含文字时的输出排版问题
到了这里,就基本解决了排版问题,如下代码,在控制台直接输出是没什么问题的:
源代码和结果:
C++包含文字时的输出排版问题

是吧,效果还不错,但是最近又发现了其他问题,就是如果是采用文件读写操作,写入txt文本文件中时,如果加入汉字的话(只是数字字母的话则没关系),你的排版就会变得有些奇怪,如下代码:
C++包含文字时的输出排版问题
它输入结果是这样的:
C++包含文字时的输出排版问题
我们发现上面的‘三’和下面的‘一’没有对齐,可是仔细数了数,上面的空格有两个(一个空格1bit,一个汉字2bit),下面的空格有六个,也就是说,输出严格遵守了8个bit宽度的输出,可是为什么排版上会变得奇怪呢?

仔细观察了下,在记事本上打开的文本上的文字一个字不是占两个位置,而是占三个位置,而控制台上是严格遵守1个汉字2bit的格式显示的,这就导致了排版的错误。

其实这也不是什么大问题,只不过是记事本显示时和其他文本软件显示的效果不太一样,如果将这些文本在复制到word中还是排版正确的。
如下效果:
C++包含文字时的输出排版问题

好了,基本就这样了,虽然是很小的问题,但是一开始碰到时还是有些懵逼,至于垂直排版,之后再说吧。

相关文章:

  • 2021-09-13
  • 2022-12-23
  • 2021-05-19
  • 2022-12-23
  • 2021-08-08
  • 2022-12-23
  • 2021-09-27
  • 2022-02-21
猜你喜欢
  • 2022-12-23
  • 2021-11-01
  • 2022-12-23
  • 2021-06-01
  • 2022-12-23
  • 2022-12-23
  • 2022-01-02
相关资源
相似解决方案