C语言细节——献给入门者(一)

时间:2022-08-26 20:36:36

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.

C语言细节——献给入门者(一)

2.

C语言细节——献给入门者(一)

这两段代码的错误就在于两个连着的scanf("%c",&ch);当第一个读入一个字母后,第二个ch读入了回车;为了避免这种情况,我们有两种办法解决。

一是加个getchar();吃掉回车

二是scanf()里面加个"\n"

所以上面两个代码的改正方法是:

第一个代码在循环里面的scanf("%c",&ch1);这句前面加个getchar();   或者改成scanf("\n%c",&ch1);

第二个代码错在\n的位置,while外面还有一个scanf,之后就有一个回车需要吃掉,所以直接把\n放在前面,scanf("\n%c",&ch1);这样就可以了。

以上。

C语言细节——献给入门者(一)的更多相关文章

  1. C语言细节——献给入门者(三)

    C语言细节——献给入门者(三) >>主题:关于强制类型转换 先来瞎扯下强制类型转换,c语言有很多数据类型,long,short,int,float,double,bool,char等等.当 ...

  2. C语言细节——献给初学者(二)

    C语言细节——献给初学者(二) 主题  循环运用+选择判断 C语言循环有for和while/do...while: 选择判断有:if...else和switch...case 在循环中需要注意搭配br ...

  3. Swift语言Auto Layout入门教程:上篇

    原文:Beginning Auto Layout Tutorial in Swift: Part 1/2,译者:@TurtleFromMars 开始用自动布局约束的方式思考吧! 更新记录:该教程由Br ...

  4. C语言细节总结笔记

    C语言细节总结笔记 */--> C语言细节总结笔记 Table of Contents 1. 三步异或法交换数字 2. 做差法交换数字 3. 按n位置位 4. 求余求商求积 5. 辗除法求最大公 ...

  5. Mysql C语言API编程入门讲解

    原文:Mysql C语言API编程入门讲解 软件开发中我们经常要访问数据库,存取数据,之前已经有网友提出让鸡啄米讲讲数据库编程的知识,本文就详细讲解如何使用Mysql的C语言API进行数据库编程.   ...

  6. [转载] C语言细节,写的非常棒!

    这篇文章主要讨论C语言细节问题.在找一份工作的时候,语言细节占的比例非常小,之前看某个贴着讨论,估计语言细节在面试中,占了10%的比重都不到,那为什么还要研究C语言的细节呢,我觉得有三个原因促使我总结 ...

  7. C语言学习从入门到精通书籍,10万读者都认可

    C语言程序设计从入门到精通 10万读者认可的编程图书精粹 零基础自学编程的入门图书 详解C语言编程思想和核心技术 很多初学者,对C语言.c++的概念都是模糊不清的,C语言.c++是什么,能做什么,学的 ...

  8. 学习swift语言的快速入门教程推荐

    随着苹果产品越来越火爆,苹果新推出的swift必定将在很大程度上代替oc语言.学好swift语言,对于IOS工程师来讲,已经是一门必备技能. 有一些比较好的英文版教程,值得学习. 1. Swift T ...

  9. 记录JavaFx中非常重要的细节,入门了也未必知道

    title: 记录JavaFx中非常重要的细节 JavaFx中有一些疑难杂症,或许你以为你掌握了JavaFx,但是也未必知道我所说的这些问题和解决方案,如果有帮助到你的,可以加群最大最活跃的JavaF ...

随机推荐

  1. Leetcode 55. Jump Game

    我一开始认为这是一道DP的题目.其实,可以维护一个maxReach,并对每个元素更新这个maxReach = max(maxReach, i + nums[i]).注意如果 i>maxReach ...

  2. React Native的环境搭建以及开发的IDE

    (一)前言 前面的课程我们已经对React Native的环境搭建以及开发的IDE做了相关的讲解,今天我们的主要讲解的是应用设备运行(Running)以及调试方法(Debugging).本节的前提条件 ...

  3. memset 的实现分析

    memset 是 msvcrt 中的一个函数,其作用和用途是显而易见的,通常是对一段内存进行填充,就其作用本身不具有任何歧义性.但就有人一定要纠结对数组的初始化一定要写成如下形式: int a[... ...

  4. Maven仓库管理-Nexus

    Maven仓库管理-Nexus @import url(http://www.blogjava.net/CuteSoft_Client/CuteEditor/Load.ashx?type=style& ...

  5. [No000063]Python格式化输出

    python print格式化输出. 1. 打印字符串 print ("His name is %s"%("Aviad")) 效果: 2.打印整数 print ...

  6. python中报错总结

    python标准异常 异常名称 描述     BaseException 所有异常的基类 SystemExit 解释器请求退出 KeyboardInterrupt 用户中断执行(通常是输入^C) Ex ...

  7. 201521123038 《Java程序设计》 第七周学习总结

    201521123038 <Java程序设计> 第七周学习总结 1. 本周学习总结 2. 书面作业 1.ArrayList代码分析 1.1 解释ArrayList的contains源代码 ...

  8. Cache Line

    转载: https://yq.aliyun.com/articles/46550

  9. struts2简单入门-Action的三种配置方式

    普通的配置方式 优点:可读性高 缺点:重复的配置太多. 使用情况 一个actian只有一个方法,只需要处理一种请求. 代码演示 <action name="voteResult&quo ...

  10. &lbrack;持续交付实践&rsqb; pipeline使用:语法详解

    一.引言 jenkins pipeline语法的发展如此之快用日新月异来形容也不为过,而目前国内对jenkins pipeline关注的人还非常少,相关的文章更是稀少,唯一看到w3c有篇相关的估计是直 ...