您的位置:首页 > 编程语言 > C语言/C++

——黑马程序员——C语言基础--printf函数和scanf函数

2015-10-25 22:30 435 查看
-----------android培训java培训、java学习型技术博客、期待与您交流!-----------

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;
}

结果为:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: