C语言细节——献给入门者(一)
C语言细节——献给入门者(一)
主题 输入输出需要注意的细节
首先我们要知道大致有scanf(),printf(),getchar(),putchar(),gets(),puts()这几种输入方式。
1⃣️.scanf()&gets()
首先看个最普通的例子:
char str[20];
scanf(“%s”,str);
当我们输入helloworld,此时str为“helloworld”
但是当我们输入hello world,此时str为“hello”
原因是scanf输入字符串时遇到空格和回车就停止读入
————
对比着看gets()
gets(str);
当我们输入helloworld,此时str为“helloworld”
但是当我们输入hello world,此时str为“hello world”
说明gets遇到空格依然把空格当成字符读入,而不是停止,但是遇到回车依然会停止读入
2⃣️.printf()
printf()大约只需要注意输出的对应,以及一下这两种情况
1.printf(“%d ”,123,456);
这种情况下会输出123,原因是printf函数参数的压栈顺序是从右到左,也就是456先压入栈,123在456上面,而取出参数时又是从栈顶开始出,所以输出为123
2.printf(“%d”,(123,456));
这种情况下输出456,原因是小括号里面表示一条语句,而返回值是最右边的数,所以这边的参数是456,123根本没有传进printf函数。
此外再讲一些printf输出格式(此部分借鉴他人,不打字了):
(整数格式)
int a=1234;
printf("a=%d\n",a); //a=1234
printf("a=%2d\n",a); //a=1234 超过2位,按实际输出
printf("a=%6d\n",a); //a= 1234 不足6位,右对齐
printf("a=%06d\n",a); //a=001234 不足6位,前面补0
printf("a=%-6d\n",a); //a=1234 '-'左对齐
(浮点数格式)
float m=8888.8888; //float 单精度型浮点数 有效位数是6位或7位,根据不同的浮点数会有不同
float m1=8888.8888f; //在后面加上f或F,编译警告:truncation from'const double'to 'float'
//编译器默认浮点数为double
float m2=8888.888f;
double n=8888.8888;
double n1=8888888888.88888888; //double 双精度型浮点数 有效位数是15位
printf("m=%f\n m1=%f\n m2=%f\n n=%lf\n n1=%f\n",m,m1,m2,n,n1); // m=8888.888672
// m1=8888.888672 m2=8888.887695
// n=8888.888800 n1=8888888888.888889
//%f的默认输出小数位数就是6位不管有没有l
/*printf的%f说明符的确既可以输出float型又可以输出 double型。 根据"默认参数提升"规则(在printf这样的函数的
可变参数列表中 ,不论作用域内有没有原型,都适用这一规则)float型会被提升为double型。因此printf()只会看到
双精度数。严格地讲,%lf在printf下是未定义的,但是很多系统可能会接受它。要确保可移植性,就要坚持使用%f。*/
printf("m4=%4.2f\n",m);
//宽度总共4位,小数两位,小数点一位,整数一位,这里
//整数超过宽度规定,按实际整数位输出
printf("m5=%9.6f\n",m); //浮点数小数部分不足6位,右对齐
printf("m6=%9.2f\n",m); //整数部分不足6位,右对齐;小数部分超过2位,四舍五入
char c[20]="Hello,world!";
printf("c=%s\n",c);
printf("c=%6.9s\n",c);
//c=Hello,wor 6.9s表示输出一个长度长度不小于6且不大于9
//的字符串。若大于9, 则第9个字符以后的内容将被删除。
3⃣️.getchar()
getchar();是读取一个字符。包括空格,回车;
比较大的作用是当需要输入一个数字之后有需要输入一个字符串的时候;
如:
scanf(“%d”,&num);
scanf(“%s”,str);//或者gets(str);
此时输入
123 hello
或者
123
hello
字符串读入都是会出错的,原因是把回车或者空格当成你想要读的字符串读进str了,这个时候我们需要在这两行输入中间夹一个getchar();来吃掉这个回车或者空格以保证str读取正确。
getchar()的使用方法还可以一个一个读入字符;
如:while((ch=getchar())!=EOF)//注这里内部的小括号不能漏,不然ch的值就是getchar()!=EOF的比较返回的真假值了,因为!=优先级大于=,优先级请自己查。
4⃣️.putchar()&puts()
这两个其实没什么好说的,就是一个输出单个字符,一个输出一个字符串,需要注意的是puts()会自动在输出的字符串后面加上一个换行。
以上。
学的不精,望广大网友查错提建议,谢谢~
补充两个(以下是两个学弟写的两段典型的代码):
1.
2.
这两段代码的错误就在于两个连着的scanf("%c",&ch);当第一个读入一个字母后,第二个ch读入了回车;为了避免这种情况,我们有两种办法解决。
一是加个getchar();吃掉回车
二是scanf()里面加个"\n"
所以上面两个代码的改正方法是:
第一个代码在循环里面的scanf("%c",&ch1);这句前面加个getchar(); 或者改成scanf("\n%c",&ch1);
第二个代码错在\n的位置,while外面还有一个scanf,之后就有一个回车需要吃掉,所以直接把\n放在前面,scanf("\n%c",&ch1);这样就可以了。
以上。
C语言细节——献给入门者(一)的更多相关文章
- C语言细节——献给入门者(三)
C语言细节——献给入门者(三) >>主题:关于强制类型转换 先来瞎扯下强制类型转换,c语言有很多数据类型,long,short,int,float,double,bool,char等等.当 ...
- C语言细节——献给初学者(二)
C语言细节——献给初学者(二) 主题 循环运用+选择判断 C语言循环有for和while/do...while: 选择判断有:if...else和switch...case 在循环中需要注意搭配br ...
- Swift语言Auto Layout入门教程:上篇
原文:Beginning Auto Layout Tutorial in Swift: Part 1/2,译者:@TurtleFromMars 开始用自动布局约束的方式思考吧! 更新记录:该教程由Br ...
- C语言细节总结笔记
C语言细节总结笔记 */--> C语言细节总结笔记 Table of Contents 1. 三步异或法交换数字 2. 做差法交换数字 3. 按n位置位 4. 求余求商求积 5. 辗除法求最大公 ...
- Mysql C语言API编程入门讲解
原文:Mysql C语言API编程入门讲解 软件开发中我们经常要访问数据库,存取数据,之前已经有网友提出让鸡啄米讲讲数据库编程的知识,本文就详细讲解如何使用Mysql的C语言API进行数据库编程. ...
- [转载] C语言细节,写的非常棒!
这篇文章主要讨论C语言细节问题.在找一份工作的时候,语言细节占的比例非常小,之前看某个贴着讨论,估计语言细节在面试中,占了10%的比重都不到,那为什么还要研究C语言的细节呢,我觉得有三个原因促使我总结 ...
- C语言学习从入门到精通书籍,10万读者都认可
C语言程序设计从入门到精通 10万读者认可的编程图书精粹 零基础自学编程的入门图书 详解C语言编程思想和核心技术 很多初学者,对C语言.c++的概念都是模糊不清的,C语言.c++是什么,能做什么,学的 ...
- 学习swift语言的快速入门教程推荐
随着苹果产品越来越火爆,苹果新推出的swift必定将在很大程度上代替oc语言.学好swift语言,对于IOS工程师来讲,已经是一门必备技能. 有一些比较好的英文版教程,值得学习. 1. Swift T ...
- 记录JavaFx中非常重要的细节,入门了也未必知道
title: 记录JavaFx中非常重要的细节 JavaFx中有一些疑难杂症,或许你以为你掌握了JavaFx,但是也未必知道我所说的这些问题和解决方案,如果有帮助到你的,可以加群最大最活跃的JavaF ...
随机推荐
- react-native 问题总结
给npm换源 1.通过config配置指向国内源 npm config set registry http://registry.cnpmjs.org //配置指向源 npm info express ...
- C#使用ajaxForm进行上传图片
<div class='imgOuter addImgBtn l_canshu' id='ImagePath1' value=''> <img src="../Images ...
- zabbix调用微信报警
1.注册微信企业号,可以选团体号(针对小团队) 2.创建管理组 3.创建部门,记住部门id (使用了部门id,发消息会发送到所有部门成员,所以如果要单独发送给某个用户,""这样设置 ...
- 用Block封装ASIHttpRequest
用Block封装ASIHttpRequest 横方便的网络请求方法,不用每次都写代理方法.使代码先得很整齐,不会凌乱. 接口部分: // // LYHASIRequestBlock.h // ASIB ...
- JS小数点加减乘除运算后位数增加的解决方案
/** * 加法运算,避免数据相加小数点后产生多位数和计算精度损失. * * @param num1加数1 | num2加数2 */ function numAdd(num1, num2) { var ...
- Web3D编程入门总结——WebGL与Three.js基础介绍
/*在这里对这段时间学习的3D编程知识做个总结,以备再次出发.计划分成“webgl与three.js基础介绍”.“面向对象的基础3D场景框架编写”.“模型导入与简单3D游戏编写”三个部分,其他零散知识 ...
- ASP.NET MVC controller 之间传JS值
在ASP.NET MVC中有东西叫TempData,它的类型是TempDataDictionary,它与ViewData以及ViewBag的不同之处在于 它的内部是使用session来保存信息的,可以 ...
- math方法
1.丢弃小数部分,保留整数部分parseInt(5/2) 2.向上取整,有小数就整数部分加1 Math.ceil(5/2) 3,四舍五入. Math.round(5/2) 4,向下取整 Math.fl ...
- spring基础整理
spring基础教程:https://www.tutorialspoint.com/spring/spring_overview.htm 注入实例 <bean id="" c ...
- logstash5.x配置
logstash --help --可以通过此命令看到所有命令 -f, --path.config --配置文件路径 -e, --config.string --可直接运行的配置字符串 -w, --p ...