=========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. JS中的数组创建,初始化

    JS中没有专门的数组类型.但是可以在程序中利用预定义的Array对象及其方法来使用数组. 在JS中有三种创建数组的方法: var arr = new Array(1,2,3,4); var arr = ...

  2. U2000解决备份:服务器不可达、FTP/TFTP/SFTP IP地址与网管地址不一致

    只需要将一下几点设置到位这些问题基本解决: 设置->网元软件管理->FTP设置 如果你的U2000服务器和OLT都在一个内网,那么就IP1和IP2就都输入U2000服务器的内网IP,否则按 ...

  3. UIResponder的API

    @property(nonatomic, readonly) UIResponder *nextResponder; 返回响应者链中的下一个响应者,或者nil如果没有下一个响应者. @property ...

  4. oracle学习笔记(十四) 数据库对象 索引 视图 序列 同义词

    数据库对象 用户模式:指数据库用户所创建和存储数据对象的统称.在访问其它用户模式的数据库对象时需加上用户模式. 如:scott.emp, scott.dept等. 数据库对象包括:表.视图.索引.序列 ...

  5. Springboot学习:Web开发介绍

    简介 使用SpringBoot: 1).创建SpringBoot应用,选中我们需要的模块: 2).SpringBoot已经默认将这些场景配置好了,只需要在配置文件中指定少量配置就可以运行起来 3).自 ...

  6. 802.1X高级配置

    部署VLAN和ACLCisco Catalyst交换机(认证方)和Cisco ACS(认证服务器)具备动态分配VLAN或者ACL的能力.Cisco ACS可以将某个用户分配给指定的VLAN,或应用AC ...

  7. 【转载】Eclipse 最常用快捷键 (动画讲解),最简单的一些快捷键

    Eclipse有强大的编辑功能, 工欲善其事,必先利其器, 掌握Eclipse快捷键,可以大大提高工作效率. 小坦克我花了一整天时间, 精选了一些常用的快捷键操作,并且精心录制了动画, 让你一看就会. ...

  8. leetcode 0209

    目录 ✅ 500. 键盘行 描述 解答 ✅ 905. 按奇偶排序数组 描述 解答 py sorted 参数详解 ✅ 559. N叉树的最大深度 描述 解答 java dfs-like method(r ...

  9. 【PAT甲级】1039 Course List for Student (25 分)(vector嵌套于map,段错误原因未知)

    题意: 输入两个正整数N和K(N<=40000,K<=2500),分别为学生和课程的数量.接下来输入K门课的信息,先输入每门课的ID再输入有多少学生选了这门课,接下来输入学生们的ID.最后 ...

  10. python闯关之路一(语法基础)

      1,什么是编程?为什么要编程? 答:编程是个动词,编程就等于写代码,那么写代码是为了什么呢?也就是为什么要编程呢,肯定是为了让计算机帮我们搞事情,代码就是计算机能理解的语言. 2,编程语言进化史是 ...