c语言超出域宽怎么处理

c语言超出域宽怎么处理,第1张

一、C语言中,如果你给定的宽度小于数据实际宽度时,会按实际宽度输出!
二、对于字符串 *** 作,可以采用s方式控制输出宽度,如:
printf("%66s",str
);
这时的输出会保证为6个字符!
printf("%00s",str
);这时,输出内容为空
其他的不支持这种写法。
如果符点数想不输出小数点后面的数,可以使用%0f或%0lf方式输出,输出的数据会自动将小数部分四舍五入。

#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
int a, b;
cout << "请输入平行四边形两边的距离值:";
cin >> a >> b;
for (int i = 1; i <= b; i++)
{
cout << setw(i);
for (int j = 1; j <= a; j++)
{
cout << '';
}
cout << endl;
}
return 0;
}

c语言中域宽为8表示为:printf("%8u\n"i)。
域宽,汉语词语,拼音是yùkuān,意思是指存放输出数据的宽度。域宽通常插在百分号和转换说明符之间。用于存放输出数据的宽度称为“域宽”。如果域宽小于被打印数据的宽度,数据通常会在域内右对齐。如果输出值的宽度大于域宽时,域宽是自动增长的。域宽通常插在百分号和转换说明符之间
数据就是数值,也就是我们通过观察、实验或计算得出的结果。数据有很多种,最简单的就是数字。数据也可以是文字、图像、声音等。数据可以用于科学研究、设计、查证、数学等。柯岩《奇异的书简·船长》:“贝汉廷分析着各个不同的数据,寻找着规律,终于抓住了矛盾的牛鼻子。

 对于流数据的输入输出格式,C++提供了两种不同的控制方式,一种是使用ios_base类提供的setf、width等函数设置输入输出格式,另一种是通过重载的格式控制符“<<”、“>>”以及流格式控制对象进行设置。
本文只介绍:用函数设置或者恢复格式
大部分流的输入输出格式可以用setf函数来设置。该函数有两种重载形式。其但参数的setf原型为:
fmtflage setf(fmtfalg flag)
参数flag说明所要设置的格式,由ios_base给出,可取如下枚举常量:
enum{
left =0x0001, //在域中靠左输出
right =0x0002, //在域中靠右输出
internal =0x0004, //符号靠左数值靠右输出,中间默认以空格填充
dec =0x0008, //数值以十进制输出
hex =0x0010, //以16进制输出
oct =0x0020, //8进制输出
fixed =0x0040, //浮点数以小数方式输出
scientific =0x0080, //浮点数以科学计数方式输出
boolalpha =0x0100, //布尔值以true/false方式输出
showbase =0x0200, //8进制前面加0做指示符,16进制前面加0x做指示符
showpoint =0x0400, //不管小数点和尾部的0是否可省略不写,都输出小数点和0
showpos =0x0800, //在正数前面输出+号
skipws =0x1000, //不读入空白字符(空格,制表符\t,回车\r,和换行\n)
unitbuf =0x2000, //每次写入数据都刷新到相应设备
uppercase =0x4000, //科学计数法的"e"和16进制计数的"x",大写输出为"E"和"X"
adjustfield =left | right | internal, //一般用作对齐方式的屏蔽码
basefield =dec | hex | oct, //一般用作数值进制输出方式的屏蔽码
floatfield =scientific | fixed //一般用作浮点数输出方式的屏蔽码
};
一般用派生类ios作前缀”ios::”使用以上枚举值
Setf函数的另一个使用原型如下:
Fmtflags setf(fmtflags flag,fmtflags mask)
其中第二个函数mask为隐码格式例如设置adjustfield,basefield和floatfield格式组成隐码格式的所有格式会首先被复位,然后用第一个参数flag去设置新格式
对于setf函数设置的格式,可用unsetf函数进行复位下面是他的原型,参数mask为所要复位的格式
Void unsetf(fmtflags mask)
下面程序使用setf/unsetf函数对内建的cout流进行格式设置和复位
#include
using namespace std;
int main(void)
{
//科学计数方式显示,大写E
coutsetf(ios::scientific | ios::uppercase);
cout<<20065<<endl; //输出20065E+03
//下面的showpos不起作用,不会显示出"+"号
coutsetf(ios::floatfield,ios::fixed | ios::showpos);
cout<<20065<<endl; //输出20065
//显示"+"号
coutsetf(ios::showpos);
cout<<20065<<endl; //输出+20065
return 0;
}
对于流的其他格式,如输出的最小宽域、数值精度以及填充字符的格式设置,可以使用ios_base类提供的width和precision函数,以及ios类提供的fill函数
Width函数用newwidth设置新的最小域宽,如果输出不足以占满整个域,会补充适当的前导空格或者前导0
Streamsize width(streamsize newwidth)
默认的数值精度为6位有效数字,可用precision函数将参数newprecision设置为新的精度值,数值输出时会按这个精度进行必要的四舍五入
Streamsize precision(streamsize newprecision)
默认的填充字符为空格字符,可以用fill函数将参数fill_char字符设置为填充字符
Char_type fill(char_type fill_char)
下面示例程序对cout流进行了域宽、精度和填充字符等流格式进行了设置。
#include
using namespace std;
int main(void)
{
coutwidth(20);
cout<<"hello"<<endl; //右对齐输出hello,占20字符
coutprecision(4);
cout<<2009228<<endl; //输出2009
coutprecision(5);
cout<<2009228<<endl; //输出20092
coutprecision(7);
cout<<2009228<<endl; //输出2009228
coutwidth(20);
coutfill('');
cout<<"baby"<<endl; //输出"baby"
return 0;
}

对于setw(),你可以这样理解。stew(5)<<v,设置变量v输出占用5个位置(域宽,5个位置,就是5个数字的宽度),并且右对齐,如果v的位数超过5位,则不起作用。与C语言中printf("%5d",v);有一样的意思,具体你可以编写代码实践实践。学C++,或者学编程,就需要一边看书一边写代码,因为有些概念是在编程之外是没有的,需要实践后,才能知道具体指代的是什么。

#include<iostream>
#include <iomanip>
using namespace std;
int main( int argc,charatgv[])
{
int a[20]={1,302,3,2432424,5,6,7,8,9,3240,11,12,43243213,14,15,2346,17,18,45,34};//定义一个数组
cout<<"左对齐"<<endl;
for(int i=1;i<=20;i++)
{
cout<<setiosflags(ios::left)<<setw(12)<<a[i-1];
//setiosglags(ios::left)设置左对齐输出的格式标志位
//setw(12)设置域宽为12
if (0==i%5)//每输出5个数字就换行
{
cout<<endl;
}
}
cout<<endl;
cout<<"右对齐"<<endl;
for( i=1;i<=20;i++)
{
cout<<setiosflags(ios::right)<<setw(12)<<a[i-1];
if (0==i%5)
{
cout<<endl;
}
}
cout<<endl;
return 0;
}
如果对预定义的格式控制不清楚的话就给我留言吧

cinwidth(5); //每次只接收4个字符,其他的放在流中等待接收。
详细介绍如下:
设置域宽
如果所需的宽度比设置的域宽小,空位用填充字符填充。如果显示数据所需的宽度比设置的域宽大,系统输出所有位。域宽设置仅对下一行流读入或流插入抄做有效,在一次 *** 作完后被置0。
Setw
Width:输入 *** 作提取字符串的最大宽度比定义的域宽小1,这是因为在输入的字符串后面必须加上一个空字符。

#include <iostreamh>
#include <ctypeh>
#include <iomaniph>

int main()
{
int w=4;
char str[10];

cout<<"Enter a sentence:\n";

cinwidth(5); //每次只接收4个字符,其他的放在流中等待接收。

while( cin>> str )
{
coutwidth(w++); //将4个字符输出,设置每次输出的域宽增加1
cout<<str<<endl; //输出字符
cinwidth(5); //设置接收4个字符
}

return 0;

}
输入输出情况:
Enter a sentence:
happy new year
happ
y
new
year
^Z
先输出happ(四个字符),y留在下一次。遇到空格接收结束,第二次只有y,到y输出时,输出域宽是5。下一个接收的是new(后面的空格断开了接收),……

使用setprecision() *** 作符,例如:

//-------------------------------------------

#include <iostream>

#include <iomanip>

using std::cout;

using std::setprecision;

using std::endl;

int main(int argc, char argv[])

{

cout<<setprecision(3)<<10/30<<endl;//setprecision(3)用于设定后面的输出的精度

return 0;

}

扩展资料:

setprecision用法

使用setprecision(n)可控制输出流显示浮点数的数字个数。C++默认的流输出数值有效位是6。

如果setprecision(n)与setiosflags(ios::fixed)合用,可以控制小数点右边的数字个数。

setiosflags(ios::fixed)是用定点方式表示实数。

如果与setiosnags(ios::scientific)合用, 可以控制指数表示法的小数位数。

setfill(' char ');命令用于设置要显示的填充字符,当域宽大于输出项宽度时用该字符填充多余的位。

setprecision( int);用于设置显示数字的精度的位数

参考资料来源:百度百科-setprecision


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/13336135.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-17
下一篇 2023-07-17

发表评论

登录后才能评论

评论列表(0条)

保存