本章学习内容, 字符输出函数putchar() 字符输入函数getchar() 数据的格式化输出函数printf() 数据的格式化输入函数scanf(),第4章 键盘输入 和屏幕输出,4.1单个字符的输入/输出,通过调用标准库函数来实现 #include 字符输出函数 putchar(ch) 输出一个字符ch 字符输入函数 getchar() 无参数 函数值为从输入设备接收的字符,【例4.1】大小写英文字母转换,Press a key and then press Enter: B↙ b,,,printf()函数的作用:向计算机系统默认的输出设备(一般指终端或显示器)输出一个或多个任意类型的数据。 printf()函数的一般格式: printf(“格式控制字符串“ [,输出项表]);,4.2数据的格式化屏幕输出,1.格式控制字符串。 可以包含以下三种字符: (1)输出项的格式说明。格式说明的一般形式如下: %[Flags][Width][.prec][h|L]格式指示符,Flags为选择的标志字符。常用的有: - : 为左对齐,否则右对齐 +:正数输出+,负数输出- 空格:正数输出空格,负数输出-,Width为宽度指示符。用十进制数来设置输出值的最少输出位数。数据宽度大于Width ,按实际宽度输出 数据宽度小于Width时,补空格,.prec为精度指示符。用小数点加十进制正整数构成,用来限制输出数的精度。,[h|L]为长度修饰符: h短整型数据的值 L长整型数据的值,格式指示符:用来进行格式转换,(2)转义字符 (3)普通字符──除格式指示符和转义字符之外的其它字符。格式字符串中的普通字符,原样输出。 2.输出项表 输出项表是可选的。如果要输出的数据不止1个,相邻2个之间用逗号分开。下面的printf()函数都是合法的: (1)printf(“I am a student.\n“); (2)printf(“%d“,3+2); (3)printf(“a=%f b=%5d\n“, a, b); 必须强调:“格式字符串”中的格式指示符,必须与“输出项表 ”中、输出项的数据类型一致,否则会引起输出错误。,【例4.2】大小写英文字母转换,Press a key and then press Enter: B↙ b, 98,printf()的格式修饰符,Format for float: %f General format: %[ . ]f,Example: printf(“Value is:%10.4f“, 32.6784728);,Value is: 32.6785,printf()的格式修饰符,Example: printf(“Value is:%10f“, 32.6784728);,Value is: 32.678473,Example: printf(“Value is:%.3f“, 32.6784728);,Value is:32.678,printf()的格式修饰符,,,Input r: 5.3↙ printf WITHOUT width or precision specifications: circumference = 33.300854, area = 88.247263 printf WITH width and precision specifications: circumference = 33.30, area = 88.25,【例4.3】计算圆的周长和面积,在程序中给变量提供数据,可以用赋值语句,也可以用输入函数。 scanf()函数的作用:通过键盘输入,同时提供一个或多个任意类型的数据。 scanf()函数的一般格式: scanf(“格式控制字符串”, 输入项首地址表); 1、格式控制字符串:包含3种类型的字符 (1)格式说明:格式说明的一般形式为: %[*] [宽度] [h|l] 类型字符 * 本输入项在读入后不赋给相应的变量 宽度n 该项输入数据所占列数为n。,,4.3数据的格式化键盘输入,换句话说,读取输入数据中相应的n位,但按需要的位数赋给相应的变量,多余部分被舍弃。 例如,scanf(“%3c%3c“, 假设输入“1234567”,则系统将读取12赋给变量ch1;将读取345赋给变量ch2,所以printf()函数的输出结果为:ch1=12,ch2=345。 类型修饰符──h、l。 其含义与printf()中的一样,分别为短整型和长整型(双精度) 。,格式指示符 格式指示符是必须的,表示输入后转换的数据类型。与printf函数格式中的格式指示符相同。,(2)空白字符: (空格、Tab键和回车键):作为相邻2个输入数据的缺省分隔符; (3)非空白字符(又称普通字符):普通字符不是显示的而是规定在输入有效数据时,必须原样一起输入的字符。 如:scanf(“ch=%d,f=%f\n“, 若要使ch值为3,f的值为56.6,则应怎样输入?,2、输入项首地址表──由若干个表示内存首地址的项组成,相邻2个项之间,用逗号分开。 内存首地址,可以是变量的首地址,也可以是字符数组名或指针变量。 变量首地址的表示方法:&变量名 其中“&”是地址运算符。 “&ch”是指变量ch在内存中的首地址,其意思是将整数3存放到以&ch为内存地址的内存空间中。,#include main() { int a, b; printf(“Please input a and b:“); scanf(“%2d%*2d%2d“, },Please input a and b:,a=12, b=56, a+b = 68,123456↙,,跳过一个输入项,输入数据的格式控制,#include main() { int a, b; scanf(“%d %d“, },问题1:当要求程序输出结果为 a = 12, b = 34 时,用户应该如何输入数据?,12 34↙,输入数据的格式控制——例4.4,#include main() { int a, b; scanf(“%d %d“, },问题2:当限定用户输入数据以逗号为分隔符,即输入数据格式为: 12,34↙ 时,应修改程序中的哪条语句?怎样修改?,,,输入数据的格式控制——例4.4,#include main() { int a, b; scanf(“%d %d“, },问题3:语句scanf(“%d %d“, 时,用户应该如何输入数据?,a = 12, b = 34↙,输入数据的格式控制——例4.4,#include main() { int a, b; scanf(“%d %d“, },问题4:限定用户输入数据为以下格式 1234↙ 同时要求程序输出结果为a = 12, b = 34,%2d%2d,输入数据的格式控制——例4.4,#include main() { int a, b; scanf(“%d %d“, },问题5:限定用户输入数据为以下格式 12↙ 34↙ 同时要求程序输出结果为a = “12“ ,b = “34“,\“%d\“ ,b = \“%d\“,输入数据的格式控制——例4.4,#include main() { int a, b; scanf(“%d %d“, },问题6:设计程序使得用户可以以任意字符(回车、空格、制表符、逗号、其他)作为分隔符进行数据的输入,输入数据的格式控制——例4.4,#include main() { int a, b; scanf(“%d %d“, },问题7:输入123456时程序的输出结果是什么?,输入数据的格式控制——例4.4,a = 12, b = 56,#include main() { int a, b; scanf(“%d %d“, },问题8:如果用户输入了非法字符,例如输入了12 3a,那么程序运行结果如何?,输入数据的格式控制——例4.4,12 3a↙ a = 12, b = 3,#include main() { int a, b; scanf(“%d %d“, },问题9:如果用户输入的是123a,那么结果又会如何呢?,输入数据的格式控制——例4.4,123a↙ a = 123, b = -858993460,#include main() { int a, b; scanf(“%d %d“, },问题10:如果程序第5行语句修改为.,那么结果又会如何呢?,输入数据的格式控制——例4.4,#include main() { int data1, data2; char op; printf(“Please enter the expression data1 + data2\n“); scanf(“%d%c%d“, },Please enter the expression data1 + data2,第1次测试,12 + 3↙,12 4199288 = 4199300,C格式符的问题及解决—例4.5,#include main() { int data1, data2; char op; printf(“Please enter the expression data1 + data2\n“); scanf(“%d%c%d“, },Please enter the expression data1 + data2,第2次测试,12 3↙,12 3 = 15,C格式符的问题及解决—例4.5,#include main() { int data1, data2; char op; printf(“Please enter the expression data1 + data2\n“); scanf(“%d%c%d“, },Please enter the expression data1 + data2,第3次测试,12+3↙,12+3 = 15,C格式符的问题及解决—例4.5,#include main() { int a; char b; float c; printf(“Please input an integer:“); scanf(“%d“, },Please input an integer:,希望得到的运行结果,12↙,Please input an character :,a↙,Please input a float number:,3.5↙,integer:12,character :a,float number:3.500000,C格式符的问题及解决—例4.6,#include main() { int a; char b; float c; printf(“Please input an integer:“); scanf(“%d“, },Please input an integer:,结果好像很奇怪呀!,12↙,Please input an character :,character:,Please input a float number:,3.5↙,integer:12,,float number:3.500000,C格式符的问题及解决—例4.6,#include main() { int a; char b; float c; printf(“Please input an integer:“); scanf(“%d“, },Please input an integer:,程序修改后得到的运行结果,12↙,Please input an character :,a↙,Please input a float number:,3.5↙,integer:12,character :a,float number:3.500000,C格式符的问题及解决—例4.6,,,,,,,,,,,#include main() { int a; char b; float c; printf(“Please input an integer:“); scanf(“%d“, },C格式符的问题及解决—例4.6,,使用空白字符(空格属于空白字符)会使scanf()函数在读操作中略去输入中的一个或多个空白字符,#include main() { int data1, data2; char op; printf(“Please enter the expression data1 + data2\n“); scanf(“%d %c%d“, },12+3↙,12 + 3↙,12↙ +↙ 3↙,再回头来看例4.5 如何以任意分隔符输入加法算式?,格式输入函数常见错误,scanf(“%d,%f\n“, 几点忠告 不要拘泥于细节 不要死记硬背 在使用中慢慢掌握,注意!,Questions and answers,,
展开阅读全文