C++输入输出自我总结

先说一下最基本的输入输出函数

比如从c语言里继承的

1.scanf()

scanf("%d",&x);    注意一下一般在ACM竞赛里scanf比cin的效率要高,所以一般都用scanf

不过scanf无法读取空白字符(碰到空白字符就自动结束)这个大家可以测试一下.


2.gets()

gets()函数和scanf唯一不同的就是可以读取空白符,gets函数只有碰到回车换行符才会结束,而scanf

一旦碰到空白符就会自动结束.


3.getline()

说道结束标志,不得不说起getline,比如在一段  输入A#a格式的字符串里(A为字符串,a为数字)提取数字a

我们有2个办法

一个是利用strchar查找,之后sscanf分割,如:

int main()
{
    char A[100L];
    char *p;
    int  a;
    scanf("%s",A);
    p=strchr(A,'#');
    sscanf(p+1,"%d",&a);
    printf("%d\n",a);
}

不过这样显然十分的麻烦,这时候我们可以使用另外一个函数getline()

以下是一段函数的百科:

getline()函数会生成一个包含一串从输入流读入的字符的字符串,直到以下情况发生会导致生成的此字符串结束。1)到文件结束,2)遇到函数的定界符,3)输入达到最大限度。
在函数遇到和结束定界符相等的字符时函数结束,同时函数抽出定界符,此种情况下该定界符既不被放回输入流,也不被放入要生成的字符串。所以由此可以理解输入结束后的第一个回车是定界符,被确认后抛弃,而第二个才是程序执行运行时正常需要的!
举个例子

int main()
{
    string A;
    getline(cin,A,'#');
    int a;
    scanf("%d",&a);
    cout<<A<<endl;
    printf("%d\n",a);
}

也就是说getline只有碰到'#'才会结束输入,不论是换行还是空白符都无法结束.


4.getchar()

这个函数的话用来读取单个字符的,下面说一下一个技巧,也是很多人经常容易犯的

int main()
{
    char x[100L];
    int  m;
    scanf("%d",&m);
    getchar();//大家可以试试把这个去了会有什么区别?
    gets(x);
    puts(x);
}

5.cin,cout

输入输出流的话我自己也不是很清楚,不过以后有了使用的心得了的话会再补上,这里转一个网上输入输出流格式

的控制函数表

http://blog.csdn.net/virtualdesk/article/details/5355793

1.使用控制符控制输出格式

控制符作用
dec设置整数的基数为10
hex设置整数的基数为16
oct设置 整数的基数为8
setbase(n)设置整数的基数为n(n只能是16,10,8之一)
setfill(c)设置填充字符c,c可以是字符常量或字符变量
setprecision(n)设置实数的精度为n位。在以一般十进制小数形式输出时,n代表有效数字。在以fixed(固定小数位 数)形式和scientific(指数)形式输出时,n为小数位数。
setw(n)设置字段宽度为n位。
setiosflags(ios::fixed)设置浮点数以固定的小数位数显示。
setiosflags(ios::scientific)设置浮点数以科学计数法(即指数形式)显示。
setiosflags(ios::left)输出数据左对齐。
setiosflags(ios::right)输出数据右对齐。
setiosflags(ios::shipws)忽略前导的空格。
setiosflags(ios::uppercase)在以科学计数法输出E和十六进制输出字母X时,以大写表示。
setiosflags(ios::showpos)输出正数时,给出“+”号。
resetiosflags终止已设置的输出格式状态,在括号中应指定内容。

2.用流对象的 成员控制输出格式

流成员函数与之作用相同的控制符作用
precision(n)setprecision(n)设置实 数的精度为n位。
width(n)setw(n)设置字段宽度为n位。
fill(c)setfill(c)设置填充字符c。
setf( )setiosflags( )设置输出格式状态,括号中应给出格式状态,内容与控制符setiosflags括号中内容相同。
ubsetf( )resetiosflags( )终止已设置的输出格式状态。

cout.width(10); 
cout.setf(ios::hex);

3.设置格式状态的格式标志

格式标志作用
ios::left输出数据在本域宽范 围内左对齐
ios::right输出数据在本域宽范围内右对齐
ios::internal数值的符号位在域宽内左对齐,数值右对齐,中间由填充字符填充
ios::dec设置整数的基数为10
ios::oct设置整数的基数为8
ios::hex设置整数的基数为16
ios::showbase强制输出整数的基数(八进制以0打头,十六进制以0x打头)
ios::showpoint强制输出浮点数的小点和尾数0
ios::uppercase在以科学计数法输出E和十六进制输出字母X时,以大写表示
ios::showpos输出正数时,给出“+”号。
ios::scientific设置浮点数以科学计数法(即指数形式)显示
ios::fixed设置浮点数以固定的小数位数显示
ios::unitbuf每次输出后刷新所有流
ios::stdio每次输出后清除 stdout,stderr

以小数形式,保留三位小数输出: 
cout<<setprecision(3)<<setiosflags(ios::fixed)<<3.1415926<<endl;




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值