c&c++输入输出控制格式

许多情况下,都需要控制输出结果的表现形式。如输出宽度、输出精度、输出格式等。C++的iomanip.h中定义了许多控制符,这些控制符可以直接插入到流中,控制数据的输出格式。控制符有两种:控制常量和控制函数,控制常量定义在iostream.h中,控制函数定义在iomanip.h中。

常用控制符在iostream.h中,函数控制符在iomainip.h中。

控制符                                      描述

dec                                        10进制

hex                                        16进制

oct                                         8进制

setfill(c)                               设填充字符为c

setprecision(n)                     设置显示小数精度为n位

setw(n)                               设域宽为n个子符

setiosflags(ios::fixed)           小数方式表示

setiosflags(ios::scientific)       指数表示

setiosflags(ios::left)              左对齐

setiosflags(ios::right)            右对齐

setiosflags(ios::skipws)         忽略前导空白(用于输入)

setiosflags(ios::uppercase)            16进制数大写输出

setiosflags(ios::lowercase)             16进制数小写输出

注意:除了setw(n)控制符之外,其他控制符对后面的所有输出起控制作用,直到改变输出格式为止。

例1、输出8进制和16进制数

常量dec、hex和oct用来控制必须按10进制、16进制或8进制形式输出。

 #include<iostream>
using namespace std;
int main()
{
int number=;
cout<<dec<<number<<"\n"<<hex<< number<<"\n"<<oct<<number<<"\n";
return ;
}

结果为:

15
f
17

注意:由于这三个标识符已经被定义为系统常量,注意不能在定义为其他变量使用。

上面这段代码没有加#include<iomanip>也能正确运行,但是假如想下面这一段代码使用了setw就要加这个类引用了。

例2、设置值的输出宽度

函数setw(n)用来控制输出宽度,如果数据实际宽度大于设置宽度,将按实际宽读输出;如果设置宽度大于实际输出宽度,数据输出时将在前面补相应数量的空格。另外,该控制符只对一次输出起作用。

 #include <iostream>
#include <iomanip>
using namespace std;
int main( )
{
int number=;
cout<<setw()<<number<<setw()<<<<endl;
return ;
}

运行结果:

_1234_ _564

例3、设置填充字符

setfill(c)函数用来设置填充的字符,默认情况下为空格。

 #include <iostream>
#include <iomanip>
using namespace std;
int main()
{
int number=;
cout <<setfill('*')<<setw()<<number<<endl;
return ;
}

输出结果:

*1234

例4、设置对齐格式

函数setiosflags(ios::left)和setiosflags(ios::right)用来控制输出左右对齐格式。当数据实际宽度小于输出宽度时该控制才起作用。默认情况下数据输出是右对齐。

 #include<iostream>
#include<iomanip>
using namespace std;
int main()
{
int number=;
cout<<setiosflags(ios::left)<<setfill('*')<<setw()<<number<<endl;
cout<<setiosflags(ios::right)<<setfill('*')<<setw()<<number<<endl;
return ;
}

输出结果:

1234**

**1234

例5、控制浮点数显示

函数setprecision(n)可用来控制输出流显示浮点数的数字个数(整数部分加小数部分)。

c++默认的流输出数值的有效位是6。当小数截短显示时,进行四舍五入处理。

函数setiosflags(ios::fixed)用来控制符点数是按纯小数方式显示。系统默认为纯小数方式输出。

函数setiosflags(ios::scientific)用来控制符点数是按科学记数法方式显示。

函数setiosflags(ios::showpoint) 用来强制显示小数点和符号。

 #include<iostream>
#include<iomanip>
using namespace std;
int main()
{
const float x=20.0/,y=18.0/; cout<<"x:\n";
cout<<x<<endl;
cout<<setiosflags(ios::scientific)<<x<<endl;
cout<<setiosflags(ios::fixed)<<x<<endl; cout<<"\ny:\n";
cout<<y<<endl;
cout<<setiosflags(ios::showpoint)<<y<<endl;
return ;
}

输出结果为:

2.85714         (默认6位,整数部分加小数部分)

2.857143e+000        (默认6位,指小数部分)

3              (默认0不输出)

3.00000         (强制输出0)

标准输入输出函数printfscanf

在程序设计中输入输出是不可缺少的内容,因此在C语言中提供了printf与scanf标准函数来满足输入输出要求。需要说明的是,在C++中提供了更方便的输入输出控制,这就是I/O流。但为了满足一些对printf与scanf使用习惯的要求,C++中仍保留了这两个函数。

<1>、printf函数

格式:

printf (格式控制字符串,输出项1,输出项2,…)

说明:

(1)格式控制字符串决定了数据输出的结果。它由“格式说明字符”和“普通字符”组成。普通字符按原样输出,格式说明字符将对应输出数据转换成指定的格式输出。格式控制字符串的形式为:

%[域宽]格式字符

域宽部分是可选的,每个格式说明对应于一个输出参数,该参数被转换成由格式说明规定的数据格式后输出。

例如:

 #include <iostream>
#include <iomanip>
using namespace std;
int main()
{
int a=;
float b=-5.2;
printf("a=%d,b=%8.3f\n",a,b);
return ;
}

输出结果如下:

a=10,b=  -5.200

(2)格式说明字符及其规定的输出格式

printf的格式说明字符见下表

格式说明符     参数类型     输出格式

d,I            int           十进制整数

o              int           八进制数(无前导0)

x,X           int           十六进制数(无前缀0x或0X)

u              int            无符号十进制数

c              int            单个字符

s              char *       字符串(必须以’\0’结束或给定长度)

f               double      小数形式的的浮点数(小数位数由精度决定,缺省为6位)

e,E           double       标准指数形式的浮点数(小数位数由精度决定,缺省为6位)

%             不转换        输出一个%

域宽说明字符      意义

-                 在指定的区域内以左对齐方式输出(无’-’号时为右对齐)

+                 输出正值时前面冠以符号+

空格              输出的第一个字符不是符号时,要输出一个空格做前缀

0(零)           在域宽范围内用前导0填补空位

#                 对于o格式输出前导0,对于x或X输出0x或0X前缀。

m(正整数)         指出输出数据的最小宽度。

.(小数点)          分隔域宽与精度,小数点前面可以没有与宽说明

n(正整数)          数据输出的精度即小数部分的位数,

h                 指出输出数据是短整型

l                  指出输出数据是长整型

L                  指出输出数据是高精度浮点型(long double)

例1

 #include<stdio.h>
int main()
{
int a=;
float b=-5.2;
printf("a=%#o,b=%08.3f",a,b);
return ;
}

输出结果为:

a=012,b=-008.200

例2

 #include<stdio.h>
int main()
{
int a=,b=;
long c=;
printf("%5d,%5d\n%ld\n",a,b,c);
printf("%3ld\n%7ld\n%d\n",c,c,c);
return ;
}

结果:

28,   38

289868

289868

289868

289868 //16位机输出27724

例3

 #include<stdio.h>
int main()
{
int a=-;
printf("%d,%o,%x,%X,%6x\n",a,a,a,a,a);
return ;
}

在16位机上输出结果为:

-3,177775,fffd,FFFD,fffd

在32位机上输出结果为:

-3,37777777775,fffffffd,FFFFFFFD,fffffffd

例4

 #include<stdio.h>
int main()
{
char ch='a';
int a=;
printf("%c,%d,%3c\n",ch,ch,ch);
printf("%c,%d,%3d\n",a,a,a);
return ;
}

输出结果为:

a,97,  a

A,65, 65

例5

 #include<stdio.h>
int main()
{
printf("%3s,%-5.3s,%5.2s\n","hello","hello","hello");
return ;
}

输出结果为:

hello,hel  ,   he

说明:第一个"hello"按%3s输出,由于"hello"长度超过3,因此按实际长度输出。第二个"hello"输出宽度为5,且从前面截取3个字符左对齐输出,第三个"hello"的输出宽度仍为5,从"hello"中截取2个字符右对齐输出。

<2>scanf函数

一般形式:

scanf(格式控制字符串,地址1,地址2,…);

说明:格式控制字符串同前面的printf函数。地址是指变量的地址,格式是变量的前面加&符号。

例如:

 #include<stdio.h>
int main()
{
int i;
printf("please input i:\n");
scanf("%d",&i);
printf("i=%d\n",i);
return ;
}

变量的定义与初始化

看下面例子:

 #include<iostream>
using namespace std;
int main()
{
int num;
char ch='a';
for (num=ch;num<='z';num++)
cout<<num<<",";
return ;
}

程序输出什么结果?

答:将输出97,98,...,122

在c++中,任何一个变量在被引用之前必须被定义。

c++中变量可以在程序中随时定义,不必集中在程序之前。

定义格式:

〈类型〉〈变量名表〉;

当有多个变量时,其间用逗号隔开。

例如:

int  i,j,k;
float x,y,z;
char c1,c2,c3;

注意:在同一个内存块中不允许定义同名变量,即不允许重复定义一个变量。

变量在定义时可直接给变量一个初始值,称为变量初始化。变量初始化也可放在需要的时候进行。变量被初始化后其值将保存到被改变为止。变量定义以后,如果没有被初始化,并不意味着这个变量中没值,该变量中要么是默认值,要么是无效值。在后面将要讲到,对外部和静态变量定义后其默认值对int型的为0,对浮点型的为0.0;对char型为空。而其他内部变量未初始化时其值是无效的,这是因为该变量所在地址中的内容是先前保留下来的无意义的值。在定义变量时可一次初始化多个变量。

例如:

float  x,y=3.14,z=0.0;

char  ch1='a', ch2='\n';

这里,y,z,ch1,ch2在定义的同时就进行了初始化。

而x只是做了变量说明并没有赋初值。

C(C++)输入输出格式的更多相关文章

  1. [ACM训练] ACM中巧用文件的输入输出来改写acm程序的输入输出 + ACM中八大输入输出格式

    ACM中巧用文件的输入输出来改写acm程序的输入输出 经常有见大神们使用文件来代替ACM程序中的IO,尤其是当程序IO比较复杂时,可以使自己能够更专注于代码的测试,而不是怎样敲输入. C/C++代码中 ...

  2. c++ --> cin和cout输入输出格式

    cin和cout输入输出格式 Cout 输出 1>. bool型输出 cout << true <<" or " << false < ...

  3. C语言第一次作业——输入输出格式

    题目1温度转换 本题要求编写程序,计算华氏温度150°F对应的摄氏温度.计算公式:C=5×(F−32)/9,式中:C表示摄氏温度,F表示华氏温度,输出数据要求为整型. 1.实验代码 #include& ...

  4. hdu ACM Steps Section 1 花式A+B 输入输出格式

    acm与oi很大的一个不同就是在输入格式上.oi往往是单组数据,而acm往往是多组数据,而且题目对数据格式往往各有要求,这8道a+b(吐槽..)涉及到了大量的常用的输入输出格式.https://wen ...

  5. topcoder 的一些输入输出格式

    自从上年的11月份参加过TC的比赛后,就再也没有参加了,因为它的输入输出格式比较难接受,还有它的页面字体比较小,看得我很辛苦...藉口藉口--懒而已!不过以后我会尽量去参加的,为了提高自己的编程能力. ...

  6. POJ数据的输入输出格式

    POJ在评阅习题时需要向程序提供输入数据,并获取程序的输出结果.因此提交的程序需按照每个习题具体的输入输出格式要求处理输入输出.有的时候,测评系统给出程序的评判结果是“数据错误”或“结果错误”,有可能 ...

  7. Hadoop MapReduce常用输入输出格式

    这里介绍MapReduce常用的几种输入输出格式. 三种常用的输入格式:TextInputFormat , SequenceFileInputFormat , KeyValueInputFormat ...

  8. Hadoop(七):自定义输入输出格式

    MR输入格式概述 数据输入格式 InputFormat. 用于描述MR作业的数据输入规范. 输入格式在MR框架中的作用: 文件进行分块(split),1个块就是1个Mapper任务. 从输入分块中将数 ...

  9. Hadoop学习之常用输入输出格式总结

    目的 总结一下常用的输入输出格式. 输入格式 Hadoop可以处理很多不同种类的输入格式,从一般的文本文件到数据库. 开局一张UML类图,涵盖常用InputFormat类的继承关系与各自的重要方法(已 ...

  10. C语言输入输出格式符

    C语言输入输出格式符 printf函数(格式输出函数) 1.一般格式 printf(格式控制,输出表列) 例如:printf("i=%d,ch=%c\n",i,ch); 说明: ( ...

随机推荐

  1. EasyUI使用JSON保存数据

    目前来说,使用JSON保存数据比较方便,前台可以不用Test.aspx 页面,可以直接用Html页面,使用.aspx页面的弊端就不在这里熬述. 具体步骤如下: 1.新建一个Html页面,命名为Test ...

  2. iOS中AutoLayer自动布局流程及相关方法

    关于UIView的Layer,IOS提供了三个方法: 1.layoutSubviews 在iOS5.1和之前的版本,此方法的缺省实现不会做任何事情(实现为空),iOS5.1之后(iOS6开始)的版本, ...

  3. Android四大基本组件介绍与生命周期

    Android四大基本组件介绍与生命周期 Android四大基本组件分别是Activity,Service服务,Content Provider内容提供者,BroadcastReceiver广播接收器 ...

  4. mysql 分组查询问题 group_concat

    这几天在做购物车的时候.购物车内的商品为一个商品占一行,结果再从数据库读出的时候,没有分组,而是循环所有的内容出来,然后进行判断.如果一样的话就把他保存到一个变量中.但是自己逻辑没搞清楚.一直出bug ...

  5. 静态变量static和extern外引用

    静态变量--加static关键字的变量,特点: (1)在全局数据区中分配内存,每次对其值得修改都会保留结果,直至程序结束. (2)若静态变量没显示初始化,那会被自动初始化为0,并且只能初始化一遍. 1 ...

  6. entity framework 新手入门篇(4)-entity framework扩展之 entityframework.extended

    对于EF的操作,我们已经有了大概的了解了,但对于实战来说,似乎还欠缺着一些常用的功能,那就是批量的删除,更新数据. 承接上面的部分,我们有一个叫做House的数据库,其中包含house表和seller ...

  7. Spring学习笔记(2)——Bean的配置

    要使应用程序中的Spring容器成功启动,需要以下三个方面的条件都具备: 1.Spring框架的类包都已经放到应用程序的类路径下 2.应用程序为Spring提供完备的Bean配置信息 3.Bean的类 ...

  8. Tomcat启动超过45S

    Timeout waiting for Tomcat v5.5&nbspServer @localhost  to start. Server did not start after 45s ...

  9. Implement Trie (Prefix Tree)

    Trie 树实现 Implement a trie with insert, search, and startsWith methods. class TrieNode { public: // I ...

  10. linux sed和awk的区别

    awkawk是一种程序语言,对文档资料的处理具有很强的功能.awk擅长从格式化报文或从一个大的文本文件中抽取数据.awk的命令格式为:awk [-F filed-separator] “command ...