目录

1.printf函数

(1)printf函数的语法

(2)printf函数的宽域

(3)printf函数的返回值

2.scanf函数

(1)scanf函数的语法

(2)scanf函数的返回值

3.getchar函数

(1)getchar函数的语法

4.putchar函数

(1)putchar函数的语法

5.gets函数和puts函数

(1)gets的语法

(2)puts的语法


在C语言中常见的输入输出函数有六个,分别是scanf'函数,printf函数,getchar函数,gets函数,putchar函数,puts函数,本篇文章就带你一次搞定这些函数的用法。

1.printf函数

printf函数是一个输出函数,能将数据打印到终端中,使用前需引用头文件stdio.h

(1)printf函数的语法

printf(格式控制,输出列表);

①格式控制:是由双引号括起来的一个字符串,它里面包含两个信息,分别为格式声明和普通字符。格式声明是由%和格式字符组成,比如%d,%f,%p等。他的作用是将格式列表中的数据按照指定的方式输出。普通字符在输出后原样输出。看一下实例测试,快速了解该函数用法。

#include <stdio.h>
int main()
{int num = 95;printf("这是数字%d\n", num);printf("这是字符%c\n", num);printf("这是地址%p\n", num);return 0;
}

以下为该函数的输出结果

明明同一个数据为什么打印出不同的结果呢?那是因为三个语句都用了不同的格式声明,%d是打印一个十进制的数字,%c是打印一个字符,而图中下划线的ASCII值正是95,%p是以地址的形式打印,编译器输出的是一个16进制的数字,0000005F转换为十进制的值也正是95。以下为一些常见的格式声明。

格式声明 说明
%d 以带符号的十进制形式输出整数
%o 以八进制无符号形式输出整形
%x,%X 以十六进制无符号形式输出整形
%u 以无符号十进制形式输出整形
%c 以字符形式输出一个字符
%s 输出字符串
%f 以单精度浮点型形式输出小数
%lf 以双精度浮点型形式输出小数
%p 以地址的形式输出

(2)printf函数的宽域

在格式声明中,我们还可以控制输出的格式,我们通过在%和字母之间加入一个数字,规定输出数字所占的宽度,比如printf("这是数字%5d\n", num);,中间的5规定了num这个数字占5个位置,如果不够则原样输出,如果溢出则在左边补空格直至充满5个位置为止,如果是负数则在右边补空格。

注:标点符号也算一个位置。

(3)printf函数的返回值

先说结论,printf函数的返回值是,该函数打印字符的个数,接下来通过一道经典的题目带你仔细品味该函数返回值的用法。

#include <stdio.h>
int main()
{int num = 43;printf("%d", printf("%d", printf("%d", num)));return 0;
}

以上代码的结果为4321,那么为什么是这个结果呢?

分析:通过观察可以发现第五行代码由三个printf函数组成,要想知道第一个printf函数的打印结果需要知道嵌套的第二个printf函数的返回值,要知道第二个printf函数的返回值得知道嵌套的第三个printf函数的返回值,第三个printf函数执行打印数字43,由于打印了两个字符因此返回2,因此第二个嵌套函数打印了2,并返回了打印字符的个数,即1,因此最外层的printf函数打印1,最终结果因此为4321。

2.scanf函数

scanf函数是一个输入函数,能从键盘中读取数据,使用前需引用头文件stdio.h

(1)scanf函数的语法

scanf(格式控制,地址列表);

格式控制就不再多做介绍,与printf函数中的格式控制大体相同,通过阅读以下代码,了解scanf函数的用法。

#include <stdio.h>
int main()
{char ch = 'a';int num = 0;double f = 0;scanf("%c %d %lf", &ch, &num, &f);printf("%c\n", ch);printf("%d\n", num);printf("%f\n", f);return 0;
}

有以下几点需要特别注意:

①&为取地址符,地址列表中只能放地址的参数,如果是数组可放数组名,因为数组名代表首元素地址。

②在格式控制中,尽量不要添加普通字符,因为添加普通字符时,在你从键盘中输入数据时,也要将这些普通字符添加上。

③scanf函数不会读取空格和回车,所以在写入以上数据时,每写一个数据就空一格或换行。

(2)scanf函数的返回值

scanf函数的返回值是该函数读取数据的个数,牛客网有许多多组输入的试题都可以通过该函数的返回值来实现。

例:判断一个数是否为奇数,如果是则输出该数字,要求多组输入,并输出。

#include <stdio.h>
int main()
{//创建num变量,输入的数字都存入num变量中int num = 0;while (scanf("%d", &num) == 1){if (num % 2 == 1){printf("%d ", num);}}return 0;
}

以上 while (scanf("%d", &num) == 1) 此行代码等价于while (scanf("%d", &num) != EOF)和

while (~scanf("%d", &num))。

EOF即是end of file的缩写,意思是文件的结尾,当scanf读取不到数据或者读入错误时,会返回EOF,EOF的本质或者说他的值是-1,下图是VS源码对EOF的定义。

3.getchar函数

getchar函数是一个读取字符的函数,使用前需使用头文件stdio.h

(1)getchar函数的语法

char ch = getchar( );

该函数并无参数,返回值是从键盘上读取的字符,如果读取错误或者无法读取数据则返回EOF。

注:该函数与scanf函数类似,但在使用中依然有一些细节需要注意

1.该函数只能用来读取字符,不能用来读取其他数据

2.该函数可以读取空格和回车,而scanf不能读取空格和回车

可以通过以下两段代码细细品味其中的细节

代码一:

#include <stdio.h>
int main()
{char str[20] = { 0 };//键盘输入 abc efscanf("%s", str);printf("%s\n", str);return 0;
}

scanf函数只能读取空格之前的数据,本例中并未读取,可以体现scanf函数不能读取空格的特性。

代码二:

#include <stdio.h>
int main()
{char psw[20] = { 0 };printf("请输入您的密码:");scanf("%s", psw);printf("请确认(Y/N):");getchar();if ('Y' == getchar()){printf("确认成功");}return 0;
}

本段代码中,第八行为上面会用一个getchar函数呢?这就涉及到了内存的读写数据,以下简单的介绍缓冲区及其作用。

如上图,键盘输入数据时,并不是直接存入内存中的,而是先将数据存入缓冲区,然后一个一个的读取数据。在以上代码中,假设我输入的是abcdefg这个字符串作为密码,abcdefg确实被存进了psw这个数组中,由于scanf函数不会读取换行符号,因此缓冲区存在一个\n,如果没有第八行的getchar函数,if语句中的getchar函数会读取到\n,if语句里的条件表达式就永远不会为真,该程序就出现了bug。故第八行的getchar函数的目的是为了清空缓存区。

4.putchar函数

putchar函数是一个输出函数,将字符打印到屏幕上,使用前需引用stdio.h文件

(1)putchar函数的语法

putchar(字符常量或变量);

该函数不仅仅能将字符常量或变量作为参数,还可以将int型的变量或常量作为参数,当将int型作为参数时,作用是打印该整型对应的ASCII值。

#include <stdio.h>
int main()
{char ch = 'A';//将字符变量作为参数putchar(ch);//将字符常量作为参数putchar('a');int i = 98;//将整型常量作为参数putchar(66);//将整型变量作为参数putchar(i);return 0;
}

5.gets函数和puts函数

gets函数是一个输入函数,其功能是将键盘获取输入的字符串,puts函数则是一个输出函数,其功能是将字符串打印到屏幕上,使用它们前都需要引用头文件stdio.h

(1)gets的语法

gets(字符数组名);

该函数有以下需要注意点:

1.gets函数可以读取空格。

2.gets函数在读取结束后,默认加一个回车。

(2)puts的语法

puts(字符数组名);

该函数与gets函数特点类似,可以输出空格,在输出结束后也会默认添加回车。

通过以下代码体会这两个函数的特点:

#include <stdio.h>
int main()
{int str[20] = { 0 };gets(str);puts(str);//测试puts是否添加换行符printf("1");return 0;
}

结语:以上就是本人在学习期间对这六个函数的理解,如有错误,欢迎广大读者纠正。

小白快进来,一篇文章彻底带你弄清C语言常见的输入输出函数相关推荐

  1. 一文带你回顾go语言常见语法现象

    前言 一门语言中的语法现象都是固定的,基础语法几乎都差不多,本篇文章涉及到go入门脚本,变量,条件语句,函数等语法现象的案例, 用一篇文章梳理go基础中可能出现的所有语言现象. 先从宏观上了解一些语法 ...

  2. 有关python方面的论文_一篇文章可以带你理解python中的类

    继续上一章的内容,上一章说到了python的核心部分-创建对象的各种名词的定义,包括:对象,类,多态,封装,继承,接口和内省,面向对象设计.还有不清楚的可以review一下前文.python核心部分创 ...

  3. 一篇文章让你学会绘画十一种常见数据分析图(折线图,直方图,散点图,雷达图等等)

    本篇博文主要内容ython Pyplot中的十一个常用绘图,包括参数说明,代码,运行结果. 有问题可以+Q180096010一起交流学习~ 目录 1. 折线图 plt.plot绘制折线图代码展示: 2 ...

  4. 一篇文章看懂有关iOS开发语言的一切!

    看什么看!点我呀!全栈程序员,免费入门到精通! 作者丨开发之家 https://www.jianshu.com/p/1fd231cfe54b 前言 iOS开发语言有哪些?OS开发语言主要包括什么?iO ...

  5. c语言常用英语带音标,计算机c语言常见英语单词 带音标.doc

    main [men] 主函数的函数名(主函数) number [?n?mb?] 数字,标号 double [?d?b?l] 表示范围(最大最小值) BASIC [?bes?k] 基本的 include ...

  6. 一篇文章教你整合ssm配置,可以收藏。

    所谓的ssm框架就是mybatis+spring+springmvc,下面一篇文章将带你了解如何整合ssm. 我上传了一个免费的解释资源,里面有这篇文章的一些个人解释,说的很幽默,简单的说明了为什么要 ...

  7. 统计一篇文章里不同单词的总数。

    输入 有多组数据,每组一行,每组就是一篇小文章.每篇小文章都是由小写字母,大写字母和空格组成,没有标点符号,遇到#时表示输入结束. 输出 每组只输出一个整数,其单独成行,该整数代表一篇文章里不同单词的 ...

  8. 了解mysql文章_一篇文章带你深入了解MySQL 索引相关

    基础知识 一张数据表中具有百万级的数据时,如何精确且快速的拿出其中某一条或多条记录成为了人们思考的问题. InnoDB 存储引擎的出现让这个问题得到了很好的解决, InnoDB 存储引擎是以索引来进行 ...

  9. 如何使用RSA 对数据加解密和签名验签?一篇文章带你搞定

    点击上方"Python爬虫与数据挖掘",进行关注 回复"书籍"即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 三分割据纡筹策,万古云霄一羽毛. ...

最新文章

  1. java 线程面试题_JAVA多线程面试题(一)
  2. Matlab制作个人主页
  3. linux g++ gcc编译c++哪个好,linux g++编译c++
  4. python爬取时怎么获取头部header
  5. jdk 1结尾和2结尾_“与巢一起工作”的结尾对您意味着什么
  6. 用turtle画皮卡丘
  7. Webpack 知识点总结
  8. golang 的枚举
  9. 二叉链表和职工管理系统结合_职工信息管理系统单链表实现C语言源程序
  10. Linq之动态条件(1)
  11. 如何在 iPhone 和 iPad 上使用与你共享?
  12. Atitit gui的实现模式文本 dom ast 像素绘图api native 目录 1. Pl ast xml domAst 1 1.1. 简介 1 1.1.1. 【具体语法树】 2 2.
  13. 【时间序列预测】基于matlab CNN优化LSTM时间序列预测(单变量单输出)【含Matlab源码 1688期】
  14. 【语音分析】基于matlab GUI语音信号线性预测(LPC)分析【含Matlab源码 910期】
  15. ida pro6.4 linux安装使用
  16. python3获取天气预报
  17. 联通的沃phone相关新闻
  18. 编译内核出错:Unable to find the ncurses package. recipe for target ‘scripts/kconfig/.mconf-cfg‘ failed
  19. 【kong系列九】之限流rate-limiting插件
  20. 无线通信基础知识9:天线的基本参数

热门文章

  1. 谈谈JS中的拷贝Copy复制的方法(Javascript拷贝)
  2. DataGridView使用bindingNavigator实现分页功能(应用存储过程)
  3. Apache Log4j 笔记
  4. 速度!三家银行宣布支持鸿蒙系统
  5. 第三篇、文本框事件监听
  6. 乖离性暗机器人_乖离性百万亚瑟王超弩级暗机器人打法攻略
  7. 小班安全使用计算机教案,安全小班教案范文(通用5篇)
  8. 2022年化工自动化控制仪表培训试题及在线模拟考试
  9. 家庭网络,防止蹭网指南
  10. word中如何插入 符号_如何在Word中插入版权或商标符号