c语言学习day06

printf 函数 

函数作用 将指定格式的数据 输出 到 屏幕终端上

printf("Hello World\n");
//将字符串Hello World输出打印到屏幕上
int a1 = 2;
printf("%d",a1);
//将定义的a1的值输出,%d是变量类型,a1是变量名称

scanf函数

函数作用 从屏幕终端上获取指定格式的数据,存储到变量的内存空间上

int a;
scanf("%d",&a);
/*定义一个变量,scanf函数代表将输入一个值赋值给变量a。
""里面是变量类型,&是取地址符,将输入的值存放在变量a的存储空间里*/

 注意:

scanf函数中的变量名前面应当是变量的地址,由取地址运算符和变量名共同组成,不能仅是变量名(没有取地址符,计算机不知道a的地址,无法存储)

如果“格式控制”中除了格式说明以外还有其它字符,则在输入数据时必须在对应位置输入与之相同的字符:

int a,b;
scanf("%d,%d", &a,&b);
//输入数字时必须用逗号,例如1,2

%c格式输入字符时,空格和转义字符都作为有效字符输入,应注意:

char a,b,c;
scanf("%c%c%c", &a,&b,&c);
/*在输入字符型时,不能用空格隔开,因为空格也算一个字符
只有连续输入才能一一对应,例如:xyz,x对应a,y对应b,z对应c.*/
int a1,b1,c1;
scanf("%d%d%d", &a1,&b1,&c1);
/*输入的数据可用空格、Tab键、回车键之任一种分开,因为这些符号都不是数字。
但不能输入123,这样会被认为是一个数字*/

在输入数值型数据时,遇到空格、回车、Tab键或遇非法输入,则认为该数据结束:

scanf("%d%c%f", &a,&b,&c);
/*输入a时,因为a是整数,输入123之后加空格,回车,tab键后,则认为a输入完毕,输入下一个字符
非法输入就是在输入整数时输入字符这种*/

 对于unsigned型变量所需的数据,可以用%u%d格式输入。

unsigned int a ;
scanf("%u",&a);
scanf("%d",&a);
//两种都可以

较复杂的输入输出格式控制 

按指定按指定格式输出数据的宽度、小数位数、上下行数据按小数点对齐、用八进制、十六进制输出等。

输出数据格式控制 

整型格式说明符

十进制格式

%d 或 %md     用于基本整型

%ld 或 %mld   用于长整型

%u 或 %mu     用于无符号基本整型

%lu 或 %mlu   用于无符号长整型

八进制格式

%o 或 %mo       用于基本整型

%lo 或 %mlo     用于长整型

十六进制格式

%x 或 %mx       用于基本整型

%lx 或 %mlx      用于长整型

%m表示输出的整型数据所占总宽度(即列数),其中当实际数据的位数不到m位时,数据前面将用空格补满;若实际数据位数大于m,则以数据的实际位数为准进行输出

字符型格式说明符

字符char型

%mc  输出的字符占m列

字符串型

%ms  输出的字符串占m列。若串长>m,全部输出;若串长<m,左面补空格。

%-ms  输出的字符串长<m,右面补空格

%-m.ns  只取字符串前n个字符。若n<m,右面补空格;若n>m,m自动取n值。

注意:一个整数,只要其值在0~255范围内,也可义用“%c”格式使其按字符形式输出。在输出前,系统会自动将该整数作为ASCII码转换成相应的字符;反之,一个字符也可以输出成一个整数。

实型格式说明符

十进制型  %m.nf 或 %-m.nf

double a = 123.456;
printf("%10.2f",a);
//输出结果是    123.46(前面4个空格补够十位,小数点后两位,四舍五入)

在输出实型数据时,格式说明符中的m表示整个数据所占的宽度,n表示小数点后面所占的位数。

如果在小数点后取n位后,所规定的数据宽度m不够输出数据前面的整数部分(包括小数点),则按实际的位数进行输出。

需要指出的是,在C语言中,用于输出单精度实型数据与双精度实型数据格式说明符是一样的。

输入数据格式控制

整型格式说明符

用于输入与输出整型数据的格式说明符是完全一样的。 m表示输入数据时的宽度(即列数)。与输出情形一样,对于八进制形式与十六进制形式的输入格式,主要用于输入无符号整型的数据。

实型格式说明符

与输出不同,输入时无论是单精度还是双精度实型,都不能用m.n来指定输出的宽度和小数点后的位数;可以指定输入数据所占的列数,系统自动按它截取所需数据,

scanf(“%3d%3d”,&a,&b); 
//当输入1234567时,a得到123,b得到456,多余的7无用;

若在%号后有一个“*”和一个数字,表示跳过它指定的列数

scanf(“%2d%*3d%3d”,&a,&b);
//当输入12345678时,a得到12, %*3d表示读入345这3个数但不赋给变量, b得到678。

当用于输入整型数据的格式说明符中没有宽度说明时,则在具体输入 数据时分为以下两种情况:

 如果各格式说明符之间没有其它字符,则在输入数据时,两个数据 之间用"空格"、或"Tab"、或"回车"来分隔。

int a,b,c;
scanf("%d%d%d",&a,&b,&c);
//输入三个变量值时可以用空格,tab键,回车相互隔开

如果各格式说明符之间包含其它字符,则在输入数据时,应输入与 这些字符相同的字符作为间隔。

int a,b,c;
scanf("%d,%d,%d",&a,&b,&c);
//输入时只能以,隔开。例如1,2,3

在用于输入的实型格式说明符中不能用m.n来指定输入的宽度和小数点后的位数(这是与输出的不同之处)。

scanf(“%7.2f”,&a);
//× 此用法是错误的

        

  • 18
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值