(C语言课件)第6部分 输入输出

上传人:我*** 文档编号:144845952 上传时间:2020-09-14 格式:PPT 页数:43 大小:96.50KB
返回 下载 相关 举报
(C语言课件)第6部分 输入输出_第1页
第1页 / 共43页
(C语言课件)第6部分 输入输出_第2页
第2页 / 共43页
(C语言课件)第6部分 输入输出_第3页
第3页 / 共43页
(C语言课件)第6部分 输入输出_第4页
第4页 / 共43页
(C语言课件)第6部分 输入输出_第5页
第5页 / 共43页
点击查看更多>>
资源描述

《(C语言课件)第6部分 输入输出》由会员分享,可在线阅读,更多相关《(C语言课件)第6部分 输入输出(43页珍藏版)》请在金锄头文库上搜索。

1、2020/9/14,1,第六部分 输入输出与格式控制,教师:林友芳,2,2020/9/14,1.标准输入输出文件,标准输入/输出文件是C程序中默认的基本文件,这两个文件在程序开始运行时被自动打开,在程序结束时被自动关闭。 默认情况下,标准输入文件对应于用户终端设备的键盘,标准输出文件对应于字符终端设备的显示器。 在C程序中,标准输入文件与任何其他输入文件一样,是一个可以从中按顺序连续读出字节流的数据来源。标准输出文件也与其他输出文件一样,是一个可以向其按顺序连续写入字节流的数据容器。,教师:林友芳,3,2020/9/14,2. 字符输入输出函数,字符IO函数getchar和putchar ge

2、tchar是无参函数 从标准输入读一个字符,返回字符的编码值。 int getchar(void) 典型使用(输入的字符赋给变量c): c = getchar(); 标准输入默认是键盘。没有输入数据时getchar等待,直到用户输入字符并换行。,教师:林友芳,4,2020/9/14,putchar,putchar把一个字符送到标准输出 putchar(O); putchar(K);,#include int main () int c; c = getchar(); putchar(c); putchar(n); return 0; ,教师:林友芳,5,2020/9/14,总结,正常情况下ge

3、tchar返回读入的字符,遇文件结束返回EOF值。 应该用int变量接收getchar的返回值,以保证正确判断输入结束。 如果用char变量,值超出char范围时结果无定义 char ch; while (ch = getchar() != EOF) .,教师:林友芳,6,2020/9/14,例,统计文件中字符个数,统计(由标准输入得到的)文件中的字符个数。 int CountInput () int c; long n = 0; while (c = getchar() != EOF) n+; return n; 标准输入默认为键盘。程序执行到getchar等待输入,得到输入后处理。 用Ct

4、rl-Z发信息可使循环结束。,教师:林友芳,7,2020/9/14,从普通文件中读入,设源程序是count.c,编译结果是count.exe。 用命令行方式启动程序,将标准输入定向到文件(设被统计文件是abcd.txt): count abcd.txt 读入循环中可以完成对输入内容的各种处理,例如: 统计某个字符出现的次数, 统计文件中的行数等等 操作系统OS允许标准输入重新定向。将标准输入定向到文件可使文件成为getchar或scanf的输入源。 程序里不必区分实际输入来自键盘还是实际文件。处理连续输入时,这两者没有本质差别。,教师:林友芳,8,2020/9/14,重定向,标准输出,文件,输

5、出数据,重定向,标准输入,文件,输入数据,重定向,变换输入数据来源或输出数据的去向,教师:林友芳,9,2020/9/14,2.标准I/O的行式输入输出,对标准输入/输出流也有行式I/O函数,原型: char *gets(char *s) int puts(const char *s) gets读一行到s,用0代行尾n并返回s。s应是字符数组。出错或遇文件结束返回NULL puts将字符串s以及一个换行符输出。正常完成返回非负值,出错返回EOF 用gets时应注意数组越界(无法限制写入长度),应选用足够大的数组,教师:林友芳,10,2020/9/14,一般用法,一般使用形式: char s256

6、; . if (gets(s) != NULL) . . if (puts(s) != EOF) . 应检查和处理操作未正常完成的情况。 gets函数无长度控制,成为许多系统的安全漏洞。 建议用fgets(buf, len, stdin)或者scanf(格式串里写%ns,其中的n为长度限制)代替gets,教师:林友芳,11,2020/9/14,3. scanf,scanf从标准输入读数据,根据格式描述将实际输入转换到指定类型,转换结果赋给指定变量: scanf(格式描述串, scanf将输入流看成空白字符分隔的字段,读入过程就是对这些字段的顺序处理 format指挥scanf进行转换,成功转换

7、得到的值赋给对应变量(地址来自参数) scanf处理完格式串或遇转换失败时结束,返回所完成的转换项数,教师:林友芳,13,2020/9/14,format里各种字符的意义,空白字符(空格/制表符) 要求scanf跳过输入中遇到的空白字符(空格、换行符、制表符) 普通字符 非转换描述的非空白字符。要求scanf将它与输入流下一个非空白字符匹配,字符相同时匹配成功,否则转换失败 转换描述 一个转换描述刻画对流中下一字段的转换方式。以字符%开始,到转换字符结束,教师:林友芳,14,2020/9/14,转换描述,转换描述,% 之后可以有 *表示只匹配不赋值; 长度描述(整数)指定输入字符个数; 赋值目

8、标长度指示h、l或L;最后是转换字符。 转换顺利完成时结果赋给参数所指变量(无*时)。 若有长度描述就以指定个数的字符为字段。有星号(如%*s、%*6d等)时所匹配的东西不赋值,直接丢掉。,教师:林友芳,15,2020/9/14,简单示例,#include int main() int i, n = 0; printf(Please input a number: ); scanf(%d, ,从用户在键盘输入的字符流的当前位置之后尝试读一个十进数,给出n的地址,告诉scanf函数,将读到数据看成是十进制数,转换后放入给定地址: while (scanf(%lf, /* 什么情况下循环结束? *

9、/,确保能正确地读入一个数,不会异常终止,自学,教师:林友芳,29,2020/9/14,文件结束符EOF,遇到文件结束或错误数据时 scanf 不返回1。如果上面程序遇到输入字母m,转换失败就会导致循环结束。 更好的方式是利用标准库定义的符号常量EOF。 如果把标准输入定向到某个文件,在读完文件里所有数据后scanf就会返回EOF值。 CTRL+Z,教师:林友芳,30,2020/9/14,EOF是什么,一般的C系统把EOF定义为-1,它一定不是正数,不会与scanf的其他返回值混淆。 默认情况下,标准输入从键盘得到数据。许多系统里可以用Ctrl-Z或Ctrl-D组合键送入文件结束信息。 前面程

10、序运行时,如果按了这种组合键,scanf 就会返回EOF并导致循环结束。,教师:林友芳,31,2020/9/14,例,统计一批输入数据的个数和最小值/最大值/平均值 解决方法 循环读入数据,并完成其他工作。 两个变量记录已知的最小、最大值。读数据中考虑更新,使其保存已读数据的最小最大值(循环不变性质)。 两个变量记录数据个数,记录已读入数据之和。循环中要正确更新(循环不变性质)。,教师:林友芳,32,2020/9/14,问题,保存最大值和最小值的变量的初始值? 解决办法 假定最少有一个输入数据 用读入的第一个数据作为最大和最小变量的初始值。,教师:林友芳,33,2020/9/14,#inclu

11、de int main () double sum = 0.0, biggest, smallest, x; int count = 1; scanf(%lf, /* 要求至少有一个输入数据 */,教师:林友芳,34,2020/9/14,4. 输出格式控制,以printf为例(其他格式化输出函数同) 原型: int printf(const char *format, .); 功能 format里的非转换描述直接输出 根据转换描述顺序转换各实参,结果插入在format里相应位置,形成整个输出 出错时返回负值 正常完成返回实际输出的字符个数,教师:林友芳,35,2020/9/14,转换描述,转换

12、描述从%开始到转换字符止,中间可有若干字符,顺序地可以有如下成分(都可缺): 1)标志字符:下面字符可以以任意顺序出现: - 转换结果在字段范围内左对齐 + 数值前面总输出正负号 空格, 转换得到的首字符不是正负号时输出一个空格 0 若数值输出不能填满字段,前面全填0 # 指定另一种形式。对转换符o的数值前加0;x和X的非0结果前加0 x或0X;e、E、f、g、G输出时总写小数点;g和G,不去掉最后的0。,教师:林友芳,36,2020/9/14,说明,2)一整数。最小宽度,转换结果至少占这么宽,可更宽。若得到的序列不够,在左边(或右边,有+时)填空格。数值在有0标志时在数字序列左边填0。 3)

13、圆点及另一数。对字符串参数表示最大输出字符数;对e、E、f表示小数点后数位;对g、G表示有效数位;对整数表示最小输出数字个数,不够时左边添0。 4)目标长度字符h、l或L。h和l用于整参数,h指short或unsigned short;l指long或unsigned long。L指long double。 字段宽度/精度可写*,表示值由参数取得。提供值的参数必须是int。,教师:林友芳,37,2020/9/14,转换字符,转换字符,所要求参数类型和实际输出形式: d,i 带符号的十进制形式整数(int) o 无符号八进制表示的整数,无先导0(int) x,X 无符号十六进制整数,无先导0 x或

14、0X。用x时十以上数字用abcdef;对X用ABCDEF(int) u 无符号十进制整数(int) c字符,转为unsigned char输出(int) s字符序列,从参数所指位置直到字符0,或者达到字段的指定宽度为止(char*) f一般实数形式-mmm.ddd,小数点后位数由精度描述定,默认6。精度为0不输出小数点(double),教师:林友芳,38,2020/9/14,转换字符,e,E科学记数法-m.ddexx或-m.ddExx,小数点后位数由精度描述确定,默认6。精度为0时不输出小数点(double) g,G灵活形式。指数小于-4或大于等于精度描述时用%e或%E形式输出,否则用%f形式

15、输出。末尾的0或小数点不输出(double) p指针,用具体实现确定的形式(void*) n把本次函数执行到此已输出的字符数写进参数。处理这个“转换描述”进行不进行任何转换(int*) %输出字符%,无转换,教师:林友芳,39,2020/9/14,转换字符,通过字段宽度和精度控制、对齐等,灵活运用转换描述可形成所需输出形式。几个实例: %16.8lf %-10.6f %20.12e %010ld %.7s 格式串里可用星号表示字段宽度和精度,实际宽度精度由参数取得。这个功能使我们可以在程序里通过程序机制控制输出格式。例: printf(%s%*dn, ”Num: , width, num);

16、先输出一个字符串,然后输出num的值(假定num是整型变量),字段宽度由(int变量)width值确定。,教师:林友芳,40,2020/9/14,6. 字符串作为格式化IO对象,文件是字节序列,正文流是字符序列,从文本流输入就是从中读取一段。输出的情况相反。 字符串也是字符序列,可作为IO对象 标准库有两个以字符串为对象的格式化IO函数。输入函数从字符串读并转换,结果赋给指定变量。输出函数实现相反过程,把输出存入字符数组并做成字符串 函数原型是: int sscanf(char* s,const char *fmt,.) int sprintf(char*s,const char *fmt,.) 与对应格式化IO函数相同,只是对象是字符串,教师:林友芳,41,2020/9/14,C中需要熟练掌握的函数,getchar,putchar,gets,puts scanf,printf,教师:林友芳,42,2020/9/14,本章要点,掌握标准输入输出文件的概念 掌握基本的输入输出函数 输入输出格式

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > PPT模板库 > PPT素材/模板

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号