十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
除了空格就是tab了,另外还有一种方式的话就是借用C++里的io流的思路,可以设置一个width
创新互联公司致力于网站建设,网站制作设计,营销网页按需定制开发,外贸营销网站建设,企业网站建设,微信平台小程序开发,网站SEO优化,网站设计制作案例丰富,是成都做网站公司和建站公司,欢迎咨询。
例如cout.width( 5 );
cout "2";
那么显示的是 2前面四个空格
我想说的是,你写一个函数print()封装C语言本来的printf()函数,当然没有必要完全封装,只要实现你想要的功能就可以了。
void print(char * c//或者是自己定义的string,int width){
}
width 当然是事先算出来的,这个不难的吧,算到正好在屏幕中间。
不过不管你怎么做,它都是最基本的肯定是打的空格。最终都是打空格,没有你直接打空格方便的,没有必要那么改的吧。你看他们的源码,不都是打的空格吗?(java 提供过哦,关于控制Io的源码)
一:格式输出函数printf()
1、调用形式一般为:printf("格式化控制字符串",输出表列);
2、格式化控制字符串用于指定输出格式,它有三种形式:
1、格式说明符:规定了相应输出表列内容的输出格式,以%打头,如%d、%o等
2、转义字符:用来输出转义字符所代表的控制代码或者特殊字符,比如常用的‘\n'、‘\t'
3、普通字符:需要原样输出的字符。
3、输出表列为若干需要输出的数据项,它与格式说明符在数量和类型上一一对应;
4、格式字符m指定输出数据所占宽度,n对实数表示输出n位小数,对字符串表示截取的字符个数,+表示右对齐,通常省略。
—表示左对齐,l用于长整型数据,可加在d、o、x、u前,更多格式说明符及其组合形式如下所示:
格式字符
数据对象
输出形式
数据输出方法
%(+)-md
int
unsigned
int
short
unsigned
short
char
十进制整数
1、无m按实际位数输出
2、有m输出m位;超过m位,按实际位数输出,不足补空格
3、有+(默认为+)右对齐(左补空格)
4、有-左对齐(右补空格)
%(+)-mo
八进制整数
%(+)-mx
十六进制整数
%(+)-mu
无符号整数
%(+)-mld
long
unsigned
long
十进制整数
%(+)-mlo
八进制整数
%(+)-mlx
十六进制整数
%(+)-mlu
无符号整数
%(+)-m.nf
float
double
十进制小数
%(+)-m.ne
十进制指数
%(+)-g
自动选用%f和%e中较短的输出宽度输出单、双精度浮点数
%(+)-mc
char
int
short
单个字符
1、无m输出单个字符
2、有m输出m位,补空格
3、有+(默认为+)右对齐(左补空格)
4、有-左对齐(右补空格)
%(+)-m.ns
字符串
一串字符
1.无m、n按实际字符串输出全部字符
2、有m、n仅输出前n个字符,补空格
3.有+(默认为+)右对齐(左补空格)
4、有-左对齐(右补空格)
二:格式输入函数scanf()
1、
调用格式一般为:scanf("格式化控制字符串",地址表列);
2、格式化控制字符串和printf()函数含义相似,所不同的是它是对输入格式进行控制;
3、地址表列是有若干等待输入的数据所对应的内存单元地址组成,由逗号隔开,一般形式为a,a为变量;
4、地址表列在数量和类型上和格式化控制字符串中的格式说明符一一对应;
5、格式字符h表示输入短型数据,可用在d、o、x前面,m指定输入数据所占宽度,
*表示对应的数据项读入后不赋给相应的变量,更多格式说明符及其组合如下
格式字符
数据对象
输入形式
数据输入方法
%md
int
short
unsigned
int
unsigned
short
十进制整数
1、无m按实际位数输入
2、有m输入m位,不足m则跟回车键
%mo
八进制整数
%mx
十六进制整数
%mld
long
unsigned
long
十进制整数
%mlo
八进制整数
%mlx
十六进制整数
%mlf
float
double
十进制整数
%mle
%mc
char
单个字符
1、无m取单个字符
2、有m输入m位,仅取第一个字符
%ms
字符串
一串字符
1、无m取回车或空格前若干字符
2、有m仅取前m字符
%-4d是用于C语言输出的格式字符串,可以用于printf类函数,包括printf, sprintf, fprintf,vfprintf,vprintf,vsprintf,snprintf,vsnprintf,vasprintf等等。
各种函数中的含义是相同的,都是按照10进制形式输出整数值,输出值范围如果不足4列宽度,那么按4列宽度输出,否则按实际宽度输出。 输出结果数值在左侧,右侧用空格补足。
%-4d的四个字符每个都有各自的功能,具体如下:
1 %:格式字符串的引导标识,每个格式字符串必须以%开头。
2 -: 输出的内容左侧为有效数据,右侧为补足字符。
3 4:输出占4列宽度,不足用空格补齐,超出按实际长度输出。
4 d: 按照10进制整型输出。
下面这个例子输出两行数据,每行五个数值:
#include stdio.h
int main()
{
printf("%-4d%-4d%-4d%-4d%-4d\n",1,12,123,123412,12345);
printf("%-4d%-4d%-4d%-4d%-4d\n",23,123,2341,1,123456);
return 0;
}
输出结果为
1 12 123 12341212345
23 123 23411 123456
从中可以看到其作用及缺陷。
对于低于4位的整数,可以很好的实现输出及对齐效果,比如例子中的第一列和第二列。
如果输出位数为4位,那么输出值和下一个输出间不会有分隔符,比如第二行的3 4两列,本来是2341和1,但输出的效果是一个数23411。
当数值超过4位时对齐效果会被打乱,同时与下一个输出见没有间隔。
比如第一行的第四列,输出数值为123412,与下一个12345没有分隔,同时第五列的12345本应与第二行的123456左对齐,但由于123412侵占了该位置,导致二者无法达成对齐效果。
所以%-4d这类格式输出,仅使用与数据规模在四位数以下的情况,超出则会出错。
如果在数据中存在负值,则负值仅可以为三位数或以下,因为输出的符号也同样会占一列宽度。
enter input 和冒号在这里就是文本内容 完全没有任何实际意义 就是你屏幕上输出的一段文字
\n是换行的意思 printf里面引号里的东西全是你希望在屏幕上打印出的文本内容
C++ 对C 作了 补充,增加了 你的 输出设想。
C语言输出函数,要求 给格式,主要是为了 满足 多种多样 的需求。
例如,同样是 int 型,默认输入输出 是 10 进制,但有的人 要求 用 16进制,有的人要求用 8 进制。 有的人 为了 又看数的大小,又要知道 内存里的信息排列 于是 要求 既 输出 10进制值,也输出 16进制值(16进制 一位拉4位很容易变2进制)。
程序例子:
int x=25;
printf("%d %x %o\n",x,x,x); // 这样 可以输出 x 的10进制值,16进制值,8进制值。
程序例子:
int y;
printf("please input y in hex\n"); // 请按16进制数 拍入 y 的值
scanf("%x",y); // 按16进制数, 读入 y
printf("y=%d\n",y); // 按10进制数 输出 y
程序例子:
float f=1.2;
double d = 123450000;
printf("f=%g d=%g\n",f,d); // 输出 f=1.2 d=1.2345e+008
满足多种多样 的需求。
------
C++, 可以用
cout x endl; 输出 不需格式,为10进制。
cout f " " d endl; 输出 不需格式,
#include stdio.h
void printStar();
int main()
{
int a, b;
printf("请输入你要的行数和列数:");
scanf("%d %d", a, b);
printStar(a,b);
return 0;
}
void printStar(int r, int c){
int i, j;
for(i =0 ; i r; i++){
for(j = 0; jc; j++){
printf("*");
}
printf("\n");
}
}