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 ...
随机推荐
- 获取 Cookie
/// <summary> /// 获取WPF url 地址中的Cookies /// </summary> public partial class Coo ...
- Where is the Global.asax.cs file
I am using VS 2008. I have created a new Asp.net web site project from File->New->Website-> ...
- ArrayBlockingQueue跟LinkedBlockingQueue的区别
.队列中的锁的实现不同 ArrayBlockingQueue中的锁是没有分离的,即生产和消费用的是同一个锁: LinkedBlockingQueue中的锁是分离的,即生产用的是putLock,消费是t ...
- mysql 查表失败
我们数据库迁移,我进数据库的目录都需要拷贝什么到新的数据库才可以用,我直接拷贝的库报错了[]北京- 2016/1/26 16:07:33 mysql> use payment;Database ...
- Hausdorff distance
微分动力系统原理 这本书里有介绍 Hausdorff距离是描述两组点集之间相似程度的一种量度,它是两个点集之间距离的一种定义形式:假设有两组集合A={a1,…,ap},B={b1,…,bq},则这两个 ...
- AngularJS Best Practices: Directory Structure
app/----- common/ // Acts as reusable components for your app---------- header/--------------- contr ...
- SQL语法粗整理
1.在同一张表中,对前一条数据进行更新性插入操作,即:
- 关于spring-servlet.xml cannot be opened because it does not exist的解决
右键项目---->properties--->Java Build Path--->source--->Add Folder --->选择conf文件夹
- 什么是FOUC?如何避免FOUC?///////////////////////////zzzz
一个新的名词叫做 FOUC 浏览器样式闪烁,之前也听说过一些类似的东西,比如样式突变等等,但这东西竟然有学名的..什么是FOUC(文档样式短暂失效)?如果使用import方法对CSS进行导入,会导致 ...
- 微软 .net 你更新这么快IDE vs2015 、语法糖 6.0、framework、‘吹得这么牛,然并用
好久没写吐槽文章了,因为无尽的加班,也因为工作的变迁,又因为最近看了微软又尼玛发布什么什么,好受不了. 今年大专毕业第八个年头了,人也到了30,真是光阴荏苒啊.最近这一两年发生了很多事,让我自己倍受打 ...