一、printf的使用:
printf()函数是一个格式化输出函数, 用户可以通过该命令向标准输出设备输出指定的格式信息。使用的方法是: printf(“格式化字符串”, 变量)。在使用前需要注意的是该命令被定义在stdio.h头文件
1.1 打印的类型
例如:
int main(void) { int a; float b; double c; a = 120; b = 43.21; c = 43.21; printf("hello\n");//直接打印想要出现在屏幕上的内容 printf("%d\n",a);//打印整型变量内容 printf("%f\n",c);//打印浮点型(小数)内容 printf("%d,%f\n",a,b);//打印多个变量数据 printf("a = %d,b = %f\n",a,b);//占位符 printf("%d\n",120);//打印整型常量 printf("%d,%f\n",120,34.56);//打印不同类型的常量 printf("%d\n",a+100);//打印表达式结果 printf("%d%%\n",120);//打印出“%” return 0; }
编译结果如下:
1.2 转换说明符的含义
%d 有符号十进制整数
%o 无符号八进制整数
%u 无符号十进制整数
%x 无符号十六进制整数
%c 一个字符
%s 字符串
%f 十进制计数法的浮点数
%e E-计数法的浮点数
%p 指针
1.3 printf的修饰
例如:
#include <stdio.h> int main(void) { int a = 123; float b = 12.34; printf("%7d\n",a); //7-表示输出的数据最小的字段宽度为7 printf("%07d\n",a); //0-表示如果实际宽度不够7则在左边用0填充 printf("%-7d\n",a); //负号-表示左对齐 printf("%.2f\n",b); //.2 - 表示保留小数后2位 printf("%10.2f\n",b); //.2 - 表示保留小数后2位 printf("%d\n",-129); printf("%+d\n",+120); //+ -在数据前显示+号 char c = 'A'; short s = 10; long l = 100; long long ll = 10000; printf("%c\n",c); printf("%hhd\n",c); // %hhd ---输出char型整数 printf("%hd\n",s); // %hd --- 输出short型整数 printf("%ld\n",l); // %ld --- 输出long型整数 printf("%lld\n",ll);// %lld --- 输出long long型整数 return 0; }
编译结果如下
注:
1. 转换说明符和变参的个数要相同
2. 转换说明符和变参的类型要一致
3. 输出的变参可以是常量,变量,表达式等
4. 输出float数据和double数据时,都用%f
5. 输出%时,需要用%%
二、scanf的使用
scanf()是C语言中的一个输入函数。与printf函数一样,都被声明在头文件stdio.h里,因此在使用scanf函数时要加上#include <stdio.h>。
2.1 scanf的格式
例如:
#include<stdio.h> int main() { int a; int b; scanf("%d%d", &a, &b); printf("%d %d",a,b); return 0; }
编译结果如下 :
2.2 scanf的注意事项
错误示例:
在 printf 中,所有的“非输出控制符”都要原样输出。同样,在 scanf 中,所有的“非输入控制符”都要原样输入。所以在输入的时候“,”必须要原样输入。少一个都不行,否则就是错误。
#include<stdio.h> int main() { int a; int b; scanf("%d,%d", &a, &b); printf("%d %d",a,b); return 0; }
所以 scanf 中%d后面也没有必要加\n,因为在 scanf 中\n不起换行的作用。它不但什么作用都没有,你还要原样将它输入一遍。
#include<stdio.h> int main() { int a; int b; scanf("%d%d\n", &a, &b); printf("%d %d",a,b); return 0; }
无法编译
所以在 scanf 的使用中一定要记住:双引号内永远都不要加“非输入控制符”。除了“输入控制符”之外,什么都不要加,否则就是自找麻烦。而且对于用户而言,肯定是输入越简单越好。
但是需要注意的是,虽然 scanf 中没有加任何“非输入控制符”,但是从键盘输入数据时,给多个变量赋的值之间一定要用空格、回车或者 Tab 键隔开,用以区分是给不同变量赋的值。
最后再次强调:scanf“输入参数”的取地址符&千万不要忘了。这是初学者经常犯的错误。而 printf 中的“输出参数”是不带取地址符的,不要混淆了。
另外注意无论是printf还是scanf,使用时在顺序,个数以及数据类型都要一一对应,这种错误编译时不会报错!
2.3 scanf的返回值
在刷题的时候经常会遇到输入多组数据,但又不清楚具体是需要几组,不知道如何停止循环。
这就要用到scanf的返回值了:
int main(void) { int a; float b; int ret; printf("请输入a和b:"); ret = scanf("%d%f",&a,&b); printf("ret = %d\n",ret); printf("a = %d,b = %.2f\n",a,b); return 0; }
所以想要当不输入的时候结束可以使用:
while(scanf("%d",&a)!=EOF)
{
表达式;
}
来表示返回值为零,也就是停止输出。
总结
我们学习和写博客就是输入和输出的过程,正如scanf和printf一样,输入了,自然需要输出才是完整的学习~