第2章 常用输入输出函数
- 格式:ppt
- 大小:307.51 KB
- 文档页数:37
常⽤输⼊输出函数总结getchar()函数从输⼊流中读取⼀个单个的字符。
如果输⼊的是字符串,函数也只读取头⼀个字符,如果下⾯还有getchar函数则接着上个getchar函数读到的下⼀个字符读⽽不需要继续输⼊就会返回⼀个读取的字符,这⾥涉及到缓冲,就是我们输⼊的字符流其实是存在于缓冲区中,所以下⼀个getchar函数才能接着读取;getchar有⼀个int型的返回值.当程序调⽤getchar时.程序就等着⽤户按键.⽤户输⼊的字符被存放在键盘缓冲区中.直到⽤户按回车为⽌(回车字符也放在缓冲区中).当⽤户键⼊回车之后,getchar才开始从stdio流中每次读⼊⼀个字符.getchar函数的返回值是⽤户输⼊的第⼀个字符的ASCII码,如出错返回-1,且将⽤户输⼊的字符回显到屏幕.如⽤户在按回车之前输⼊了不⽌⼀个字符,其他字符会保留在键盘缓存区中,等待后续getchar调⽤读取.也就是说,后续的getchar调⽤不会等待⽤户按键,⽽直接读取缓冲区中的字符,直到缓冲区中的字符读完为后,才等待⽤户按键.注意:当⽤getchar进⾏输⼊时,如果输⼊的第⼀个字符为有效字符(即输⼊是⽂件结束符EOF,Windows下为组合键Ctrl+Z, Unix/Linux下为组合键Ctrl+D),那么只有当最后⼀个输⼊字符为换⾏符’\n’(也可以是⽂件结束符EOF, getchar才会停⽌执⾏,整个程序将会往下执⾏。
譬如下⾯程序段:while((c = getchar()) != EOF){putchar(c);}执⾏程序,输⼊:abc,然后回车。
则程序就会去执⾏puchar(c),然后输出abc,这个地⽅不要忘了,系统输出的还有⼀个回车。
然后可以继续输⼊,再次遇到换⾏符的时候,程序⼜会把那⼀⾏的输⼊的字符输出在终端上。
对于getchar,肯定很多初学的朋友会问,getchar不是以字符为单位读取的吗?那么,既然我输⼊了第⼀个字符a,肯定满⾜while循环(c = getchar()) != EOF的条件阿,那么应该执⾏putchar(c)在终端输出⼀个字符a。
前面的几个例子都用到了输出函数printf,例1-3还用到了输入函数scanf,这里我们先简单介绍一下它们的格式,以便后面使用。
scanf和printf这两个函数分别称为格式输入函数和格式输出函数。
其意义是按指定的格式输入输出值。
因此,这两个函数在括号中的参数都由以下两部分组成:1) 格式控制串:格式控制串是一个字符串,必须用双引号括起来,它表示了输入输出量的数据类型。
在printf函数中可以在格式控制串内出现非格式控制字符,这时在显示屏幕上会显示源字符串。
各种类型的格式表示方式请参考:C语言格式输出函数printf()详解。
在scanf函数中也可以在格式控制串内出现非格式控制符,这时会将输入的数据以该字符为分隔。
各种类型的格式表示方式请参考:C语言scanf()函数。
2) 参数表:参数表中给出了输入或输出的变量。
当有多个变量时,用英文逗号(,)分开。
例如:1.printf("sine of %lf is %lf\n",x,s);2.// %lf为格式字符,表示按双精度浮点数处理,它在格式串中两次现,对应了x和s两个变量3.// 其余字符为非格式字符则照原样输出在屏幕上。
4.scanf("%d %fa%c",&intNum,&floatNum,&c);5.// %d, %f, %c为格式字符6.// 表示将输入的数据分别以整数、浮点数和字符形式赋值给变量intNum, floatNum,c7.// 其中的空格和a为分隔符8.// 变量intNum, floatNum,c都有一个'&'符号,表示取地址【例1-4】对例1-3稍加修改,在printf中使用多个参数,在scanf中使用'|'作为分隔符。
1.#include<stdio.h>// 包含stdio.h头文件2.3.int max(int,int);// 函数声明4.5.int main(){6.int a, b, n;// 声明两个整型变量7.printf("Input two integers: ");// 以空格为分隔8.// 以'|'为分隔符,将输入的两个整数分别赋值给a, b9.scanf("%d|%d",&a,&b);10.// 以整数形式输出a、b和最大值,a, b, max(a,b)为参数列表11.n =max(a, b);12.printf("The max between %d and %d is %d.\n", a, b, n);13.return0;14.}15.16.// 函数定义17.int max(int num1,int num2){// num1, num2为形式参数(形参)18.if(num1>num2){// 如果num1大于num219.return num1;// 返回num1并结束max函数20.}else{// 如果num2大于num121.return num2;// 返回num2并结束max函数22.}23.}运行结果:Input two integers: 12|34↙The max between 12 and 34 is 34.上面例中程序的功能是由用户输入两个整数,程序执行后输出其中较大的数。
电子技术与软件工程Electronic Technology & Software Engineering软件开发与应用Software Development And Application一图归纳C语言中文件的输入输出函数任波阳(山东科技大学山东省青岛市266000 )摘要:本文通过输入输出关系图,加深对“输入”“输出”概念及相关知识点的理解,同时总结归纳各类“输入”“输出”函数的 用法,使文件学习更加系统,透彻。
关键词:C语言;输入输出;格式控制1输入输出的关系图在编程学习中,输入与输出一直是较难理解且容易混淆的知识 点,图1为各类“输入”“输出”的关系图。
在计算机语言中,文件与键盘、屏幕、打印机、鼠标等,都 属于外围设备。
其中从内存中写数据至文本文件,为输出;从文 本文件内读取数据至内存中,为输入。
从键盘、鼠标等外围设备 向内存中存储信息,为输入;使内存中的信息通过屏幕、打印机 等设备显示出来,为输出。
C语言中,可以将信息从内存输出到文 件中的函数有:fwrite、fprintf、fputc、fputs、putw;可以将信息从 文件输入到内存中的函数有:fread、fscanf、fgetc、fgets、getw;可以将信息通过键盘等外围设备输入到内存中的函数有:scanf、getcha^g e ts可以将信息从内存输出到屏幕等外围设备上的函数有:printf、putchar、puts。
C语H函数库中的“标准输入输出函数”包括:格式输入输出 函数printf和scanf,字符输入输出函数putchar和getchar,字符串输 入输出函数puts和gets。
C语言函数库中的“文件读/写(输入输 出)函数”包括:格式化读/写函数fscanf和fprimf,字符读/写函数fgetc和fputc,字符串读/写函数fgets和fputs,字读/写函数 getw和putw函数,数据块读/写函数fread和fwrite。
C语言中基本的输入输出函数有:putchar ():把变量中的一个字符常量输出到显示器屏幕上;getchar ();从键盘上输入一个字符常量,此常量就是该函数的值;printf ();把键盘中的各类数据,加以格式控制输出到显示器屏幕上;scanf ();从键盘上输入各类数据,并存放到程序变量中;puts ():把数组变量中的一个字符串常量输出到显示器屏幕上;gets ():从键盘上输入一个字符串常量并放到程序的数组中.sscanf(); 从一个字符串中提取各类数据。
putchar() 和getchar() 顾名思议就是从输入流中获取一个字符和输出一个字符,比较简单,不再多讲。
例子如下:char c = getchar();putchar(c);格式化输入输出scanf()和printf()是最有用的,所以重点讲一下。
printf():一般形式:printf("格式控制".输出列表);eg : printf("a=%d,b=%f,c=%c\n",a,b,c); 1;格式控制.格式控制是用双引号括起来的字符串,也称"转换控制字符串",它包含以下两部分信息.格式说明:由"%"和格式字符组成,如%d,%f,%c,他的作用是把输出数据转换为指定格式输出,格式的说明总是由"%"字符开始的.普通字符:需要原样输出的字符,或者是一些有特殊含义的字符,如\n,\t。
2;输出列表就是需要输出的一些数据,也可以是表达式,如果在函数中需要输出多个变量或表达式,则要用逗号隔开.一些特殊字符的输出:单引号,双引号,和反斜杠的输出在前面加转义字符”\”如:”\’”, “\””, “\\”%的输出用两个连在一起的%%,即printf(“%%”);常用的格式说明如下:格式字符d 以十进制形式输出带符号整数(正数不输出符号)o 以八进制形式输出无符号整数(不输出前缀O) x 以十六进制形式输出无符号整数(不输出前缀OX)u 以十进制形式输出无符号整数f 以小数形式输出单精度实数lf以小数形式输出双精度实数e 以指数形式输出单、双精度实数g 以%f%e中较短的输出宽度输出单、双精度实数c 输出单个字符s 输出字符串这里强调一下:网上很多文章都说f 和lf是一样的,即不管单精度,双精度浮点数,都可以用f, 但我在POJ上做过测试,输出Double时用f确实也可以,但读入时,用f就报WA,所以大家如果对Double 进行读写的话,都用lf吧。
第二章字符输入、输出函数一:字符输入函数getchar()getchar函数的功能是从终端输入一个字符赋给一个字符变量。
getchar函数没有参数,其一般形式为:getchar( ); 只能接收一个字符变量= getchar( )Ch= getchar( )1234二putchar函数putchar函数的功能是向屏幕输出一个字符。
putchar函数的调用格式putchar(ch);其中ch可以是字符型常量、变量或是整型变量。
例:Int x=97;char y=‟a‟;Putchar(…a‟);Putchar(y);Putchar(97);Putchar(\n);Putchar(…c‟-2);Putchar(x);Putchar(\141);三:1. printf函数(各种类型)printf函数的功能是向屏幕格式化输出变量、常量或表达式的值。
printf函数的一般调用格式printf(格式控制, 输出项1, 输出项2, …);格式控制:作用按指定格式输出数据%d %ld %f %lf %cMain(){Int a=12, b=-123,c=12345;Printf(“%d%d%d\n”,a,b,c)Printf(“%d %d %d\n”,a,b,c)Printf(“%d, %d ,%d\n”,a,b,c)Printf(“%2d, %4d ,%5d\n”,a,b,c)Printf(“%2d, %4d ,%4d\n”,a,b,c) } p16float x=1.25,y=-23.456,z=234.56782;Printf(“%f, %f ,%f\n”,x,y,z)1.250000, 23.456,234.567820 p16表3-1 printf函数的格式控制符表3-2 printf函数的附加格式说明符例3-7】输出数据,并且控制数据的对齐形式、小数点后数字位数、八进制形式输出、字符串输出宽度等。
#include "stdio.h"main( ){int a=32,b=57;float x=7.876543,y=-345.123;char c='a';long l=1234567;printf("%d%d\n",a,b);printf("%-3d%3d\n",a,b);printf("%8.2f,%8.2f,%.4f,%.4f\n",x,y,x,y)printf("%e,%10.2e\n",x,y);printf("%c,%d,%o,%x\n",c,c,c,c);printf("%ld,%lo,%x,%d\n",l,l,l,l);printf("%s,%5.3s\n","CHINESE","CHINESE"); }输出结果:325732 577.88, -345.12,7.8765,-345.12307.87654e+00, -3.5e+02a,97,141,611234567,4553207,d687,18CHINESE, CHI四scanf函数scanf函数的功能是接收从键盘输入的数据,格式化后赋给变量。
(一)输入输出常用函数1,printf(1)有符号int%[-][+][0][width][.precision][l][h] d-:左对齐+:正数前加‘+’0:右对齐,acwidth<width,左补零.precision:至少输出位数。
若实际的位数>.precision,按实际输出,否者左边补零(2)无符号int%[-][#][0][width][.precision][l][h] u|o|x|X#:”%o %x/X”输出0,0x,0X.precision:同上,TC/BC包含0x/X,VC下不包含(3)实数输出%[-][+][#][0][width][.precision][l][L] f|e|E|g|G#:必须输出小数点.precision:小数位数(四舍五入)(4)字符和字符串的输出%[-][0][width] c %[-][0][width] [.precision] s.precision:S的前precision位2,scanf%[*][width] [l][h]TypeWith:指定输入数据的宽度,遇空格、Tab、\n结束*:抑制符scanf(“%2d%*2d%3d”,&num1,&num2) 输入123456789\n;num1==12,num2==567.注意:(1)指定width时,读取相应width位,但按需赋值Scanf(“%3c%3c”,&ch1,&ch2)输入a bc d efg ch1==a ch2==d(2)%c 输入单字符时“空格、转义字符”均是有效字符(二)ascll字符/字符串/文件函数1;字符非格式化输入函数(1)int getchar(void) 接受字符,以回车结束,回显(2)int getc(FILE*stream) 从stream中接受字符,以回车结束,回显stream=stdin时,(1)==(2)(3)int getche(void) 直接读取字符,回显conio.h(4)int getchar(void) 直接读取字符,不回显conio.h注意:(1,2)对于回车键返回‘\n’(3,4)对于回车键返回‘\r’2;字符/串非格式化输出函数(1)int putchar(int c) 正常返回字符代码值,出错返回EOF(2)int putc(int c,FILE*stream) 正常返回字符代码值,出错返回EOF stream==stdout(1)=(2)(3)int puts(char*stream) 自动回车换行1;字符串的赋值#include< string.h memory.h >Void *memset (void *s, char ch, unsigned n)将以S为首地址的,一片连续的N个字节内存单元赋值为CH.Void *memcpy ( void *d, void*s, unsigned n)将以S为首地址的一片连续的N个字节内存单元的值拷贝到以D为首地址的一片连续的内存单元中。