——黑马程序员——C语言基础--printf函数和scanf函数
2015-10-25 22:30
435 查看
-----------android培训、java培训、java学习型技术博客、期待与您交流!-----------
格式:printf(格式控制字符符,输出项 列表)
输出项列表:程序输出的一些数据,可以是常量、变量或者表达式,多个变量或表达式时用逗号隔开
格式控制:由%和格式字符组成,说明将输出数据的类型、长度、标志、精度
%d:输出一个有符号的十进制整数类型
%md:设置域宽输出,m可以是正也可以为负,
输出的数的位数>m时,按实际输出宽度,反之补空格
m>0,从左侧开始补空格
m<0,从右侧开始补空格
%0md:表示不足部分补0,
%c:输出一个字符类型
%s:输出一个字符串类型
%f:输出实数(包括单、双精度、长双精度)以小数形式输出,单精度只能保证7位有效数字,能精确到小数点后6位,双精度只能保证15位有效数字,能精确到小数点后6位。
%m.nf:输出指定数据宽度和小数位数,m表示总宽度,n表示小数部分的宽度不足时自动补0
例如:单精度类型代码如下
结果为:3.333333
双精度代码为:
结果为:3.333333
如果把printf中%f改为%20.15f
结果为:3.3333333333333333 注意:第一个3之前有3个空格
%-m.nf:当输出的数据长度不超过m值时,输出的数据向左对齐,右端补上空格
%e:以指数形式输出实数
%e:以指定宽度的指数形式输出
%i:按十进制整型数据的实际长度输出,作用和%d格式符相同很少用
%o:以八进制整数输出整数
%x:以十六进制形式输出整数
%u:输出无符号型数据
%g:输出浮点数,系统自动选f格式或者e格式
%p:输出变量在内存中的地址(指针)
\n:换行,将当前位置移到下一个
\r:回车将当前位置移到本行开头
\\:一个反斜杠(\)输出 \
作用:接收从键盘上输入的内容
格式:printf(格式控制字符串,输出 项的地址列表) 如:scanf("%d",&a);
输出 项的地址列表:可以是变量地址、字符串首地址、数组首地址等,多个地址用逗号隔开
格式控制字符串和printf函数相同,不允许写%m.nf格式。
特点: (1)阻塞式函数,等待用户输入,用户需按照指定格式输入,如果用户不输入任何值,会一直等待下去直到输入
(2)在接收单个变量时,输入值之前、输入多个空格、回车、Tab都会被系统忽略
代码如下:
结果为:
(3)如果要获取的内容是多个整数,中间输入的多个空格、回车、Tab都会被系统忽略
代码如下:
结果为:
(4)以混合格式输入时,如果以空格、Tab键、回车隔开输入,不会得到输入的值
代码如下:
结果为:
为了防止以上这种情况可以在格式符之间加逗号
代码如下:
结果为:
%*d:按照指定格式读入数据但不赋予相应的变量,作用是跳过相应的读入数据。
代码如下:
结果为:
C语言基础--printf函数和scanf函数
一、printf函数
1、输出格式控制符
作用:数据的输出格式:printf(格式控制字符符,输出项 列表)
输出项列表:程序输出的一些数据,可以是常量、变量或者表达式,多个变量或表达式时用逗号隔开
格式控制:由%和格式字符组成,说明将输出数据的类型、长度、标志、精度
%d:输出一个有符号的十进制整数类型
%md:设置域宽输出,m可以是正也可以为负,
输出的数的位数>m时,按实际输出宽度,反之补空格
m>0,从左侧开始补空格
m<0,从右侧开始补空格
%0md:表示不足部分补0,
%c:输出一个字符类型
%s:输出一个字符串类型
%f:输出实数(包括单、双精度、长双精度)以小数形式输出,单精度只能保证7位有效数字,能精确到小数点后6位,双精度只能保证15位有效数字,能精确到小数点后6位。
%m.nf:输出指定数据宽度和小数位数,m表示总宽度,n表示小数部分的宽度不足时自动补0
例如:单精度类型代码如下
#import <Foundation/Foundation.h> int main (int argc, const char *argv[]) { NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; //定义浮点型变量并且赋值10 float a = 10.0; //打印出a/3的值 printf("%f\n",a/3); [pool drain]; return 0; }
结果为:3.333333
双精度代码为:
#import <Foundation/Foundation.h> int main (int argc, const char *argv[]) { NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; //定义浮点型变量并且赋值10 double a = 10.0; //打印出a/3的值 printf("%f\n",a/3); [pool drain]; return 0; }
结果为:3.333333
如果把printf中%f改为%20.15f
结果为:3.3333333333333333 注意:第一个3之前有3个空格
%-m.nf:当输出的数据长度不超过m值时,输出的数据向左对齐,右端补上空格
%e:以指数形式输出实数
%e:以指定宽度的指数形式输出
%i:按十进制整型数据的实际长度输出,作用和%d格式符相同很少用
%o:以八进制整数输出整数
%x:以十六进制形式输出整数
%u:输出无符号型数据
%g:输出浮点数,系统自动选f格式或者e格式
%p:输出变量在内存中的地址(指针)
2、转义字符
\t:水平制表符,将当前位置移到下一个Tab位置\n:换行,将当前位置移到下一个
\r:回车将当前位置移到本行开头
\\:一个反斜杠(\)输出 \
二、scanf函数(阻塞式函数—等待用户输入)
1、输入格式控制
scanf函数的原理:当用户输入内容后,用户输入的内容会被存放到scanf的输入缓冲区中然后,scanf函数会根据格式控制的字符和要求,从缓存区中依次取想要的内容。如果从缓存区中取得内容和格式控制符一致,则把值存放到变量中,如果不一致,则不修改变量的值。作用:接收从键盘上输入的内容
格式:printf(格式控制字符串,输出 项的地址列表) 如:scanf("%d",&a);
输出 项的地址列表:可以是变量地址、字符串首地址、数组首地址等,多个地址用逗号隔开
格式控制字符串和printf函数相同,不允许写%m.nf格式。
特点: (1)阻塞式函数,等待用户输入,用户需按照指定格式输入,如果用户不输入任何值,会一直等待下去直到输入
(2)在接收单个变量时,输入值之前、输入多个空格、回车、Tab都会被系统忽略
代码如下:
#import <Foundation/Foundation.h> int main (int argc, const char *argv[]) { NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; //scanf 的注意事项 //定义变量 int a = 1; //从键盘接收数据 scanf("%d",&a); //打印出数据 printf("%d\n",a); [pool drain]; return 0; }
结果为:
(3)如果要获取的内容是多个整数,中间输入的多个空格、回车、Tab都会被系统忽略
代码如下:
#import <Foundation/Foundation.h> int main (int argc, const char *argv[]) { NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; //scanf 的注意事项 //定义变量 int a = 1; int b = 1; //从键盘接收数据 scanf("%d%d",&a,&b); //打印出数据 printf("%d%d\n",a,b); [pool drain]; return 0; }
结果为:
(4)以混合格式输入时,如果以空格、Tab键、回车隔开输入,不会得到输入的值
代码如下:
#import <Foundation/Foundation.h> int main (int argc, const char *argv[]) { NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; //scanf 的注意事项 //定义变量 int a = 1; char b; int c = 1; //从键盘接收数据 scanf("%d%c%d",&a,&b,&c); //打印出数据 printf("a = %d,b = %c d = %d\n",a,b,c); [pool drain]; return 0; }
结果为:
为了防止以上这种情况可以在格式符之间加逗号
代码如下:
#import <Foundation/Foundation.h> int main (int argc, const char *argv[]) { NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; //scanf 的注意事项 //定义变量 int a = 1; char b = 'a'; int c = 1; //从键盘接收数据 scanf("%d,%c,%d",&a,&b,&c); //打印出数据 printf("a = %d,b = %c d = %d\n",a,b,c); [pool drain]; return 0; }
结果为:
2、scanf函数的修饰符
关于*的使用%*d:按照指定格式读入数据但不赋予相应的变量,作用是跳过相应的读入数据。
代码如下:
#import <Foundation/Foundation.h> int main (int argc, const char *argv[]) { NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; //scanf 的注意事项 //定义变量 int a = 1; int b = 1; int c = 1; //从键盘接收数据 scanf("%d%*d%d",&a,&b,&c); //打印出数据 printf("a = %d,b = %d d = %d\n",a,b,c); [pool drain]; return 0; }
结果为:
相关文章推荐
- 学习笔记-简单模板链表类的C++实现 15/10/25
- 输出* *** *****....图形
- C++ 上溢和下溢(overflow underflow)
- C++静态计算的例子
- 黑马程序员——OC语言日志——NSMutableString和NSMutableArray 的介绍及使用
- C语言打印指针(地址)的值
- C语言实现小游戏(一)
- C++利用栈进行十进制与二进制的转换
- C++ sort()函数一些简单的用法
- Debug和Release区别
- C++继承:公有,私有和保护
- 函数应用:打印图形
- c++ primer第五版(中文)习题答案 第二章第一节-基本内置类型
- 格式字符d c s f
- 如何学好C语言/C++
- c++和java的区别
- VC++/VS2010 Win32控制台程序 运行结束 dos窗口立刻消失/一闪而过 的解决方法
- 二叉树的建立与遍历(C语言简单实现)
- C++面试笔试经典题集
- [译]C++书籍终极推荐