=========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. JDK8;HashMap:再散列解决hash冲突 ,源码分析和分析思路

    JDK8中的HashMap相对JDK7中的HashMap做了些优化. 接下来先通过官方的英文注释探究新HashMap的散列怎么实现 先不给源码,因为直接看源码肯定会晕,那么我们先从简单的概念先讲起   ...

  2. agc026F Lotus Leaves

    题目链接 题目大意 一个n*m的网格上有一些点,一个点可以跳到与其同一行或同一列的点上.给定起点和终点. 求要使起点不能跳到终点,最少撤走几个点. \(n,m\leq 100\) 解题思路 考虑将能够 ...

  3. numpy中的max()函数

    1.ndarray.max([int axis]) 函数功能:求ndarray中指定维度的最大值,默认求所有值的最大值. axis=0:求各column的最大值 axis=1:求各row的最大值

  4. Spring Boot 使用 Aop 实现日志全局拦截

    前面的章节我们学习到 Spring Boot Log 日志使用教程 和 Spring Boot 异常处理与全局异常处理,本章我们结合 Aop 面向切面编程来实现全局拦截异常并记录日志. 在 Sprin ...

  5. 杭电 1114 Piggy-Bank 完全背包问题

    Piggy-Bank Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total ...

  6. Java IO流详解(二)——File类

    在上一章博客中简单的介绍了Java IO流的一些特征.也就是对文件的输入输出,既然至始至终都离不开文件,所以Java IO流的使用得从File这个类讲起. File类的描述:File类是文件和目录路径 ...

  7. [ DLPytorch ] 线性回归&Softmax与分类模型&多层感知机

    线性回归 基础知识 实现过程 学习笔记 批量读取 torch_data = Data.TensorDataset(features, labels) dataset = Data.DataLoader ...

  8. mvn无法下载fastdfs-client-java依赖解决办法

    1.下载fastdfs-client-java源码 https://github.com/happyfish100/fastdfs-client-java 2.修改pom.xml文件 添加打包插件 & ...

  9. python--脚本传参与shell脚本传参(位置参数)

    写一个最简单的shell脚本,了解shell脚本是如何传参 1. vim test1.sh name=$1 age=$2 echo ${name} echo ${age} 2.调用脚本并传参 sh t ...

  10. Weka算法算法翻译(部分)

    目录 Weka算法翻译(部分) 1. 属性选择算法(select attributes) 1.1 属性评估方法 1.2 搜索方法 2. 分类算法 2.1 贝叶斯算法 2.2 Functions 2.3 ...