任务描述
在C语言开发中,经常会对数据进行输入和输出的操作,为此C语言提供了printf()和scanf()函数对数据进行格式化输出和输入,getchar()与putchar()函数专门针对字符的输入和输出,以及gets()和puts()函数针对字符串的操作,接下来的任务就是对前两组函数进行学习,针对于字符串的草垛,我们会在后面任务会中。
任务目标
掌握printf()与scanf()格式化输入与输出的使用。
掌握putcahr()与getcahr()函数作用与使用。
相关知识
在前面的讲解中,我们会经常使用printf()函数进行一些输出的操作,为此C语言给我们提供printf()函数进行输出。当然在程序中我们也会有一些输入的操作,C语言给我们提供了scanf()函数来帮我们实现输入的操作。
1.printf()函数的使用
关于怎么使用printf()函数对于我们来说已经不再陌生,它可以通过格式化控制字符串输出相应的数据类型。
printf()函数的调用格式为:printf("格式化字符串",输出表列)。
格式化字符串包含三种对象,分别为:
(1)字符串常量,字符串常量会原样输出,在显示中起提示作用。
(2)格式控制字符串,是以%开头的字符串,在%后面跟有各种格式控制符,以说明输出数据的类型、宽度、精度等。如表3-4所示。
表3-4常见格式控制符
常用格式控制符 |
说明 |
%d或者%i |
输出short、int、long变量,以十进制输出,%i 是老用法 |
%c |
输出char变量,也可以用%d 输出 char,输出的就是字符的 ASCII 码 |
%f |
输出float变量,输出时保留小数点后面6位 |
%lf |
输出double变量,输出时保留小数点后面6位 |
%lld |
输出long long变量(64位整数) |
%nd (如%4d,%12d) |
以n字符宽度输出整数,宽度不足时用空格填充 |
%Ond (如%04d,%012d) |
以n字符宽度输出整数,宽度不足时用0填充 |
%.nf (如%.4f,%3f) |
输出浮点数,精确到小数点后n位,%.2f 就是保 留 2 位小数 |
%s |
输出字符串 |
(3)转义字符,比如/n目的是表示换行。
输出表列中给出了各个输出项,要求格式控制字符串和各输出项在数量和类型上应该一一对应,为了直观的表示出printf()的使用,给出图3-12所示。
图3- 12 printf()函数的使用
注意:
printf 中数据类型一定不能用错,float 类型必须用%f,整数必须用%d,如果用错了会发现结果很怪异,数据结果完全对不上,结果如图3-15。比如下面的错误代码:
实例3- 7错用格式符。
printf("%f",3);
printf("%d",3.14f);
运行结果如图3-13所示,会发现数据完全对不上。
图3- 13 错误使用格式符
在 printf 中也可以同时使用多个占位符,只要和参数的类型、个数能够对的上就行:
例如以下输出
实例3- 8多个占位符同时的输出
printf("name=%s,age=%d,height=%f","王丹",18,3.14f);
运行结果如图3-14所示,显示结果完全没有问题。
图3- 14 多个占位符同时的输出
2.scanf()函数的使用
scanf()函数是负责从键盘接收用户的输入,当我们提到输入时,这意味着要向程序写入一些数据。为什么要使用scanf()函数录入信息呢?下面给大家举个例子:
实例3- 9 为什么要用scanf()函数的举例
int i=23;
printf("i = %d\n", i);
我们前面都是像这样写的,直接给变量 i 赋一个值。这个数值只能在程序中修改。很多时候我们希望这个值不是在程序中指定的,而是在程序运行的过程中由用户从键盘输入的。i的值是经过键盘录入的数据,这样的程序就灵活多了。就像我们每一次登录QQ账号和密码一样,每个人掌控着录入的账号和密码,这样才有不同的账号和密码的意义。
使用scanf()函数的调用格式为:scanf("输入控制符",变量的地址)。
“输入控制符”和“输出控制符”是一模一样的。比如一个整型数据,通过 printf 输出时用%d输出,通过 scanf 输入时同样是用%d。
接下来我们通过一个案例来讲解其用法。
实例3- 10提示用户输入两个整数,计算并且输出两个整数的和
int main()
{
int a;
int b;
printf("请输入a的值");
scanf("%d",&a);//输入第一个数 &a 表示变量 a 的地址,&是取地址符
printf("请输入b的值");
scanf("%d",&b);//输入第二个数 &b 表示变量 b 的地址
printf("a+b=%d",a+b);
getchar();
return 0;
}
运算结果如图3-15所示。
图3- 15 例题运行结果
上述案例我们从键盘上输入12,和13,然后%d格式之后,最后通过“取地址 a”和“取地址 b”找到变量 a 和b的地址,再将数字 12和13 分别放到a和b地址所以a=12、b=13。
注意:
(1)参数的个数一定要对应。如scanf("%c%d", &ch);很明显两个格式符,一个对应的变量地址。这种错误是初学者经常犯的,由于粗心大意,少写一个参数。更严重的是,这种错误在编译的时候不会报错。
(2)输入的数据类型一定要与所需要的数据类型一致,对于不匹配的类型,整个函数会直接退出,返回已经读取到的数据个数。
(3)使用scanf函数也可以一次接收输入多个数据
接下来我们通过一个案例来讲scanf函数一次接收输入多个数据用法,请看实例3-11
实例3- 11提示用户输入两个整数,计算并且输出两个整数的和(这个案例我们用scanf函数一次接收输入多个数据)
运算结果如图3-16所示。
#include
int main()
{
printf("请输入a与b的值");
int a;
int b;
scanf("%d%d",&a,&b);//输入第一个然后空格输入第二个数
printf("a+b=%d",a+b);
getchar();
return 0;
}
图3- 16 例题运行结果
运行的结构发现和变量单个输出的结构和结果一致。
getchar() 函数负责从键盘接收用户的输入一个可用的字符和printf("%c",&ch)作用一样。同一个时间内只会读取一个单一的字符。
putchar(int c) 函数负责把字符输出到屏幕上和printf("%c",ch)作用一样。 同一个时间内只会输出一个单一的字符。
getchar()putchar() 函数的使用
接下来我们通过一个案例来讲getchar()putchar() 函数用法,请看实例3-7。
实例3- 12写入一个字符,然后在输出在控制台上。
#include
int main( )
{
char c;
printf( "请输入一个字符 :");
c = getchar( );
printf( "\n您输入的字符为: ");
putchar( c );
printf( "\n");
getchar();
return 0;
}
运行的结果如图3-17所示。
图3- 17 实例3-12运行结果
上述案例通过getchar()写入一个字符,然后通过putchar(c)把写入的字符输出到控制台上。