C语言入门第四章
=========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语言入门第四章的更多相关文章
- C 语言入门第五章--循环结构和选择结构
C语言中有三大结构,分别是顺序结构.选择结构和循环结构: 逻辑运算: 与运算: && 或运算:|| 非运算:! ==== #include<stdio.h> int mai ...
- Unity 2D游戏开发高速入门第1章创建一个简单的2D游戏
Unity 2D游戏开发高速入门第1章创建一个简单的2D游戏 即使是如今,非常多初学游戏开发的同学.在谈到Unity的时候.依旧会觉得Unity仅仅能用于制作3D游戏的. 实际上.Unity在2013 ...
- TYUT程序设计入门第四讲练习题题解--数论入门
程序设计入门第四讲练习题题解--数论入门 对于新知识点的学习,需要不断地刷题训练,才能有所收获,才能更好地消化知识点. 题组链接: 程序设计入门第四讲练习题--数论 by vjudge 题解: A. ...
- Kotlin入门第四课:简单工厂模式
Kotlin基础知识的学习,请参考之前的文章: Kotlin入门第一课:从对比Java开始 Kotlin入门第二课:集合操作 Kotlin入门第三课:数据类型 初次尝试用Kotlin实现Android ...
- JavaMail入门第四篇 接收邮件
上一篇JavaMail入门第三篇 发送邮件中,我们学会了如何用JavaMail API提供的Transport类发送邮件,同样,JavaMail API中也提供了一些专门的类来对邮件的接收进行相关的操 ...
- C 语言入门第十二章---C语言文件操作
C语言具有操作文件的能力,比如打开文件.读取和追加数据.插入和删除数据.关闭文件.删除文件等. 在操作系统中,为了同意对各种硬件的操作,简化接口,不同的硬件设备也都被看成一个文件.对这些文件的操作,等 ...
- C语言学习第四章
今天学习C语言循环结构,为什么要用循环呢?因为有时候我们对一堆的数字进行重复的处理的时候要重复的编写一些相同或者差不多的代码,让程序显得很臃肿,而且写着也麻烦,如果用循环来写的话能简化很多,出错的话也 ...
- CTF---Web入门第四题 Forms
Forms分值:10 来源: Ph0enix 难度:易 参与人数:4945人 Get Flag:2776人 答题人数:2824人 解题通过率:98% 似乎有人觉得PIN码是不可破解的,让我们证明他是错 ...
- CTF---密码学入门第四题 困在栅栏里的凯撒
困在栅栏里的凯撒分值:10 来源: 北邮天枢战队 难度:易 参与人数:4531人 Get Flag:2124人 答题人数:2285人 解题通过率:93% 小白发现了一段很6的字符:NlEyQd{sef ...
随机推荐
- Python学习第二十六课——PyMySql(python 链接数据库)
Python 链接数据库: 需要先安装pymysql 包 可以设置中安装,也可以pip install pymysql 安装 加载驱动: import pymysql # 需要先安装pymysql 包 ...
- C语言-排序和查找
一 冒泡排序:算法特点:两层循环外层控制排序的趟数,内存控制相邻元素两两比较的次数.n个数共需n-1趟,(i=1;i<n;i++)趟数=n-1-1+1,其中第j趟需要相邻元素两两比较的次数为n- ...
- Android读取权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <use ...
- [原]用SQL比较两张结构完全相同的表数据
前几天面试遇到一个比较有意思的问题,就是有两张结构完全相同的表A和B,但是这两张表属于不同的业务流程,经过一段时间后发现两张表的数据不能完全匹配,有可能A比B多,也可能B比A多,或者两种可能同时存在, ...
- Priority Queue(优先队列)
今天早上起来完成了一个完整的基于二叉堆实现的优先队列,其中包含最小优先和最大优先队列. 上篇说了优先队列的特性,通过建堆和堆排序操作,我们就已经看到了这种数据结构中的数据具有某种优先级别,要么非根节点 ...
- Java中的基本数据类型语法补充
变量要先赋值后使用 不给变量赋值代表什么 不赋值就使用会怎样 (会报错) 计算并赋值运算符 作用是为了让代码更加简洁.比如 a = a + 10,可以简化为 a+=10 += -= *= /= %= ...
- log4j2 异步多线程打印日志
log4j2 异步多线程打印日志 Maven依赖 <dependency> <groupId>org.apache.logging.log4j</groupId> ...
- springboot devtool热部署的一个大坑
spring.devtools.restart.poll-interval=3000ms spring.devtools.restart.quiet-period=2999ms 别问我为什么,问就是一 ...
- [转]Java监听器的原理与实现
原文链接 监听器是一个专门用于对其他对象身上发生的事件或状态改变进行监听和相应处理的对象,当被监视的对象发生情况时,立即采取相应的行动.监听器其实就是一个实现特定接口的普通java程序,这个程序专门用 ...
- 【剑指Offer面试编程题】题目1361:翻转单词顺序--九度OJ
题目描述: JOBDU最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上.同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思.例如,&quo ...