=========C语言的输入与输出===========

%-9d : d:以十进制输出,9表示至少占用9个字符的宽度,宽度不足以空格补齐,-表示左对齐。综合起来,%-9d 表示以十进制输出,左对齐,宽度最小为9个字符。

printf() 格式控制符的完整形式如下:

%[flag][width][.precision]type

type: 表示输出类型,比如%d ,%f %c 等。

width表示最小输出宽度,也就是至少占用几个字符的位置,当输出结果的宽度不足width 时,以空格补齐,如果没有指定对齐方式,默认会在左边补齐空格,当输出结果的宽度超过width时,width不再起作用,按照数据本身的宽度来输出。

.precision表示输出精度,也就是小数的位数。

当小数部分的位数大于precision 时,会按照四舍五入的原则丢掉多余的数字;

当小数部分的位数大于precision 时,会在后面补0.

flag : 标志字符。例如:%#x中flag 对应#,%-9d 中flags 对应-。下面列出了printf() 可以利用的flag:

 - : 表示左对齐。如果没有就按照默认的对齐方式,默认一般为右对齐。

 +:用于整数或者小数,表示输出符号(正负号)。如果没有,那么只有负数才会输出符号。空格:用于整数或者小数,输出值为正时冠以空格,为负时冠以负号。

#:对于八进制(%o) 和十六进制(%x / %X)整数,# 表示在输出时添加前缀;八进制的前缀是0,十六进制的前缀是 0x / 0X 。

  对于小数(%f / %e / %g), # 表示强迫输出小数点。如果没有小数部分,默认是不输出小数点的,加上# 以后,即使没有小数部分也会带上小数点。

==========使用scanf 读取从键盘输入的数据(含输入格式汇总表)====

scanf(): 和printf() 类似,scan()可以输入多种类型的数据。

getchar()、getche()、cetch(): 这三个函数都用于输入单个字符。

gets(): 获取一行数据,并作为字符串处理。

scanf 是scan format 的缩写,意思是格式化扫描,也就是从键盘获得用户输入,和printf d的功能正好相反。

scanf("%d %d", &a,&b);  //获取用户输入的两个整数,分别赋值给变量a和变量b .

scanf 的变量前要带一个&符号。& 称为取地址符,也就是获取变量在内存中的地址。

scanf() 不会跳过不符合要求的数据,遇到不符合要求的数据会读取失败,而不是再继续等待用户输入。

====代码演示====

#include<stdio.h>

int main(){

  char letter;

  int age;

  char url[30];

  float price;

  scanf("%c",&letter);

  scanf("%d",&age);

  scanf("%s", &url);  //可以加& 也可以不加&

====对读取字符串的说明====

char str1[] = “123456789”;

char *str2 = "C 语言中文网";

  这两种形式其实是有区别的,第一种形式的字符串所在的内存既有读取权限又有写入权限,第二种形式的字符串所在的内存只有读取权限,没有写入权限。printf() 、puts()等字符串输出函数只要求字符串有读取权限,而scanf()、gets() 等字符串输入函数要求字符串有写入权限,所以,第一种形式的字符串既可以用于输出函数又可以用于输入函数,而第二种形式的字符串只能用于输出函数。

  另外,对于第一种形式的字符串,在[]里卖弄要知名字符串的最大长度,如果不知名,也可以根据赋值号后面的字符串来自动推算,此处,就是根据后面的长度来进行推算的。但是在前一个例子中,开始我们只是定义了一个字符串,并没有立即给它复制,所以没法自动推算,只能手动指明最大长度,这也就是为什么一定要协作url[30],而不能写作char url[] 的原因。

  上面我们说过,scanf() 读取数据时需要的是数据的地址,整数、小数、单个字符都要&取地址符,这很容易理解,但是对于此处的url 字符串,我们并没有加&,这是因为,字符串的名字会自动转换为字符串的地址,所以就不用加&了。

  scanf() 读取字符串时以空格为分割,遇到空格就认为当前字符串结束了,所以无法读取含有空格的字符串。

  #include<stdio.h>

int main()

{

  char author[30],lang[30],url[30];

  scanf("%s, %s",author,lang);

}

===

getchar() ,它是scanf("%c",c)的替代品,只是简洁。

getche() , 它没有缓冲区,输入一个字符后会立即读取,不用等待用户按下回车键,这就是它和scanf() 、getchar() 的最大区别。

注意: getche() 位于 conio.h 投文件中,这个头文件是windows特有的,Linux和MacOS 下没有包含该投文件。

getch() : getch() 也没有缓冲区,输入一个字符后会立即读取,不用按下回车键,这一点和getche() 相同。getch() 的特别之处是它没有回显,看不到输入的字符,酒啊后向没有输入一样。在输入密码时,我们就不希望有回显。

注意:getch() 和getche() 一样,也位于conio.h 头文件中,也不是标准函数,默认只能在windows下使用。

  gets() 是有缓冲区的,每次按下回车键,就代表当前输入结束了,gets()开始从缓冲区读取内容,这一点和scanf() 是一样的,gets 和scanf() 的主要区别是:

  gets() 能读取含有空格的字符串,而scanf() 不能。

}

C语言入门第四章的更多相关文章

  1. C 语言入门第五章--循环结构和选择结构

    C语言中有三大结构,分别是顺序结构.选择结构和循环结构: 逻辑运算: 与运算: && 或运算:|| 非运算:! ==== #include<stdio.h> int mai ...

  2. Unity 2D游戏开发高速入门第1章创建一个简单的2D游戏

    Unity 2D游戏开发高速入门第1章创建一个简单的2D游戏 即使是如今,非常多初学游戏开发的同学.在谈到Unity的时候.依旧会觉得Unity仅仅能用于制作3D游戏的. 实际上.Unity在2013 ...

  3. TYUT程序设计入门第四讲练习题题解--数论入门

    程序设计入门第四讲练习题题解--数论入门 对于新知识点的学习,需要不断地刷题训练,才能有所收获,才能更好地消化知识点. 题组链接: 程序设计入门第四讲练习题--数论 by vjudge 题解: A. ...

  4. Kotlin入门第四课:简单工厂模式

    Kotlin基础知识的学习,请参考之前的文章: Kotlin入门第一课:从对比Java开始 Kotlin入门第二课:集合操作 Kotlin入门第三课:数据类型 初次尝试用Kotlin实现Android ...

  5. JavaMail入门第四篇 接收邮件

    上一篇JavaMail入门第三篇 发送邮件中,我们学会了如何用JavaMail API提供的Transport类发送邮件,同样,JavaMail API中也提供了一些专门的类来对邮件的接收进行相关的操 ...

  6. C 语言入门第十二章---C语言文件操作

    C语言具有操作文件的能力,比如打开文件.读取和追加数据.插入和删除数据.关闭文件.删除文件等. 在操作系统中,为了同意对各种硬件的操作,简化接口,不同的硬件设备也都被看成一个文件.对这些文件的操作,等 ...

  7. C语言学习第四章

    今天学习C语言循环结构,为什么要用循环呢?因为有时候我们对一堆的数字进行重复的处理的时候要重复的编写一些相同或者差不多的代码,让程序显得很臃肿,而且写着也麻烦,如果用循环来写的话能简化很多,出错的话也 ...

  8. CTF---Web入门第四题 Forms

    Forms分值:10 来源: Ph0enix 难度:易 参与人数:4945人 Get Flag:2776人 答题人数:2824人 解题通过率:98% 似乎有人觉得PIN码是不可破解的,让我们证明他是错 ...

  9. CTF---密码学入门第四题 困在栅栏里的凯撒

    困在栅栏里的凯撒分值:10 来源: 北邮天枢战队 难度:易 参与人数:4531人 Get Flag:2124人 答题人数:2285人 解题通过率:93% 小白发现了一段很6的字符:NlEyQd{sef ...

随机推荐

  1. Codeforces 1045F Shady Lady 凸包+数学

    题目链接:https://codeforc.es/contest/1045/problem/F 题意:先给出一个系数不确定的二元多项式,Borna可以给这个多项式的每一项填上正的系数,Ani能从这个多 ...

  2. 图解 Kafka 水印备份机制

    高可用是很多分布式系统中必备的特征之一,Kafka 日志的高可用是通过基于 leader-follower 的多副本同步实现的,每个分区下有多个副本,其中只有一个是 leader 副本,提供发送和消费 ...

  3. 使用$.ajax时的注意事项

    做PHP难免接触js,我也是这样,使用ajax的时候,我比较习惯使用$.ajax({}),这种方式,因为通用性较强.有时候会较少使用js,隔一段时间后再使用,有些细节内容容易模糊不清,这一次,我又忘记 ...

  4. Python os模块、os.path模块常用方法

    os模块:os模块在python中包含普遍的操作系统功能,下面列出了一些在os模块中比较有用的部分. os.sep 可以取代操作系统特定的路径分隔符.windows下为 "\" o ...

  5. 防止重复发送Ajax请求问题

    在工作中有很多场景需要通过Ajax请求发送数据,像是注册.登录.提交用户反馈等.用户在点击了“确认”按钮之后有可能一段时间内没有收到反馈页面无任何反应,然后就接着连续多次点击“确认”按钮导致发送n个重 ...

  6. 解决小程序报错 Page "pages/index/main" has not been registered yet.

    在小程序开发中,会频繁遇到  Page "pages/index/main" has not been registered yet.   这种报错,意思就说指定的页面没有注册,找 ...

  7. Spring学习(九)

    JdbcTemplate需要的jar包 1.Spring核心必须依赖的库:commons-logging-1.1.1.jar2.Spring IoC部分核心库: spring-beans-4.3.9. ...

  8. SMBUS与I2C

    SMBUS(系统管理总线)基于I2C总线,主要用于电池管理系统中.它工作在主/从模式:主器件提供时钟,在其发起一次传输时提供一个起始位,在其终止一次传输时提供一个停止位:从器件拥有一个唯一的7或10位 ...

  9. SQL mybatis动态查询小结

    动态返回mysql某张表指定列的名字 <select id="queryColumns" resultType="map" parameterType=& ...

  10. 大道至简第一章JAVA伪代码形式读后感

    //愚公移山: public class YuGongYiShan{ //原始需求:“惩山北之塞,出入之迂” //沟通方式:“聚室而谋曰” //项目目标:“毕力平险,指通豫南,达于汉阴” //技术方案 ...