scanf读取的是标准输入;
printf是标准输出;
scanf()
()里面填的参数:int scanf(const char *_restrict_,……)表示有返回值,返回值是读取数据成功的个数,const char *_restrict_是一个参数。
用法:scanf("%c%d%f",a,b,c);
原理:行缓冲:
终端输入10,但是还没有按下回车键时,10就被存储在标准输入缓冲区。此时按下回车后,标准输入缓冲区内存储的是“10\n"。此时才会真正的执行输入输出 *** 作,scanf函数才会开始匹配。
在scanf("%d",&a);中,10 匹配到%d,寻找到变量a的地址(即取地址&),然后把10放入变量a。scanf匹配10的时候,10就被从缓冲区取出,而"\n"则留在缓冲区(%d的情况下,"\n"会被忽略掉)。但是如果是scanf("%c",&a);,"\n"也会被读取。
若缓冲区为空,则scanf函数会被卡住,被阻塞,不能继续往下执行.若scanf要读取多个输入,第一个输入读取完成后,未能及时输入,即缓冲区为空,scanf函数也会检测出来,然后被阻塞。
当然,10不一定是放在标准输入缓冲区,但会放在一个缓冲区里就是了。缓冲区的典型代表就是标准输入缓冲区和标准输出缓冲区。
printf复制粘贴的其他博主的:
printf()函数详解_望天际的博客-CSDN博客_printf函数感谢博主的分享:https://me.csdn.net/blog/K346K3461.printf()简介printf()是C语言标准库函数,用于将格式化后的字符串输出到标准输出。标准输出,即标准输出文件,对应终端的屏幕。printf()申明于头文件stdio.h。函数原型:int printf ( const char * format, ... );1返回值:正确返...https://blog.csdn.net/qq_25544855/article/details/81146800?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522165502124916781432923299%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=165502124916781432923299&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_positive~default-1-81146800-null-null.142^v13^pc_search_result_control_group,157^v14^control&utm_term=printf函数&spm=1018.2226.3001.4187
printf("%d,%5d\n",20,a); //将1000(默认右对齐)左边补空格
printf("%d,%-5d\n",20,a); //将1000左对齐,右边补空
printf("%05d\n",a); //前面补0
printf("%+d,%+d\n",a,-1000); //输出正负号
printf("% d % d\n",a,-a); //正号用空格替代,负号输出;
//由此可见“”里不一定非得是,只是是,时会输出,;如果是其它的符合也会输出
printf("%.0f %#.0f\n",e,e); //#的作用:当小数点后不输出值时依然输出小数点
printf("%.4f\n",e); //小数点后输出4位
输出结果:
20, 1000
20,1000
01000
+1000,-1000
1000 -1000
2 2.
2.3000
printf("%.8d\n",1000); //不足指定宽度补前导0,效果等同于%06d
printf("%.8f\n",1000.123456789);//超过精度,截断
printf("%.8f\n",1000.123456); //不足精度,补后置0
printf("%.8g\n",1000.123456); //最大有效数字为8位
printf("%.8s\n",“abcdefghij”); //超过指定长度截断
输出结果:
00001000
1000.12345679
1000.12345600
1000.1235
abcdefgh
仅需了解:getchar、putchar
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)