C语言的基本单位是语句,每条语句都是用来向计算机发送操作指令,但有时需要程序在运行过程中,需要用户自己手动输入数据,并且得到运行结果,那么这时输入输出函数就起到了作用。下面一一介绍C语言提供的各种输入输出函数,至于文件的输入输出函数在这里暂不做讨论,以后将会介绍。
一、putchar函数:
putchar(int ch)函数是字符输出函数,其作用是向终端输出一个字符,等同于printf(“%c”,ch),函数的定义形式为:int putchar(int ch),其参数可以是字符型变量、整形变量或常量,如输出一个字符putchar(‘s’)。该函数若输出正确,则返回输出字符的无符号整形数值,如果输出错误则返回EOF.
二、getchar()函数:
字符数据输入可使用getchar函数(不带参数),当然了有时也可以使用getch函数和getche函数,但是有所区别,下面会介绍它们之间的区别,其作用可以从输入缓存区中顺序读取一个字符。
测试程序只写出主要代码:
char s,m;
s=getchar();
putchar(s); ①
m=getchar(); ②
putchar(m);
上面代码在输入完一个字符后(如‘g’),由于需要确定输入结束需要按回车键确定,所以当把字符g赋给s后,字符回车便被送入到内存缓存区中,上面说到该函数会从缓存区中读取字符,因此第二个会直接从缓存区中读走回车符,因此m就被赋予回车这个字符,这往往跟当初的设定的结果不一样,因此需要在一和二之间加一句getchar();以便取走回车符,这样才可以继续给m赋值。
三、getch()函数、getche函数跟getchar函数的区别:
①、所处的库函数不同,getchar是stdio.h中的函数,而getch跟getche是则是conio.h中的函数。
②、getch和getche函数是直接从键盘上读取函数,它们没有缓存区,缓存区有没有字符跟它们无关,而getchar则不同,上面讲过。
③、getche和getchar你输入的字符会在屏幕上显示出来,而getch则不带回显,你输入的字符不会显示在屏幕上。
④、getch和getche这两个函数,不需要用按回车完成输入,你输入一个字符会立刻被读取,并不需要其他键(如回车)来确定完成输入,而getchar函数需要使用回车键确定完成输入。
四、字符串输出函数int puts(char *p)函数:
puts函数向终端输出一个字符串,也可以说将一个字符串放到标准输出流中。其参数是字符指针类型,也可以是字符串常量,输出一行字符串后会自动进行换行操作。如果输出正确则返回输出字符串的长度,如错误则返回0.
puts函数会在字符串中判断‘’结束标志,一旦遇到那么即使后面还有字符串也不会输出,如puts(“abcdefg”),输出结果abcd,并且自动换行。
五、字符串输入函数char *gets(char *p):
gets()函数从标准输入设备读取一个字符串,直到接受到换行或者EOF时结束,并且将读取的结果放到指针指向的字符数组当中,这里有一个问题,就是gets函数可以无限的读取,并不会判断上线,一旦超出字符数组的长度,程序将会将会崩溃,所以在使用此函数时应当注意。还有此函数如果读取成功,则返回指针p,否则返回NULL.
?
六、格式输出函数printf函数:
printf函数也成为格式输出函数,其作用是向终端输出任意类型的数据,其一般形式为printf(格式控制,输出列表)。
参数说明:
①、格式控制是由双引号括起来的字符串,其中的字符串包含两部分,一种是格式字符,另一种是普通字符,普通字符也就是按原样输出的字符,重点就是格式字符,格式字符是以%开头,用来进行格式说明,将输出的数据转化为指定的格式。
下面介绍几种格式字符:
d、i:以带符号的十进制形式输出。
o:以无符号八进制形式输出。
x、X:以无符号十六进制形式输出,二者区别是前者a~f以小写形式输出,后者以大写形式输出。
u:以无符号十进制形式输出。
c:以字符形式输出一个字符。
s:输出字符串。
f:以小数形式输出。
e、E:以指数形式输出实数,区别是用e表示指数以e表示,后面以E表示。
g、G:选用%f或%e格式中宽度较短的一种,不输出无意义的0.
如果在输出实数是%.nf时指精确到n位。
当字符格式为%ns时,表示输出字符占n列,如果字符长度小于n,那么输出的字符处在n列的最右侧,左边剩下的空格补齐。如果字符串长度大于n,则全部输出。
当字符格式为%-ns时,正好跟上面相反,输出的字符在n列的最左侧,右边以空格补齐。
当输出字符串是%n.ms格式时,指输出占n列,只取字符串左端的m个字符,并且这m个字符处在n列的右侧,左边以空格补齐,如果m>n,则m个字符全部输出。如:char *str=love;printf(“%6.3s”,str),结果为
lov,注意前面有三空格,可能不太明显。
如果%-n.ms格式时,区别是这m个字符,处在n列的左侧。上面的例子,结果为,lov ,注意后面有三空格,总共占用6列。
七、scanf函数:
scanf函数成为格式输入函数,即按指定格式将数据输入到指定变量当中。
其一般格式为scanf(格式控制,地址列表),与printf函数不同的是,printf第二个参数为变量名列表,而scanf为变量的地址列表。如&a,&b就代表变量a,b的地址,&为取址运算符,所以&a也是表达式,求变量a的地址。
scanf函数本身本身不能显示提示字符串,顾在需要提示时需要用printf函数。
scanf函数使用的格式控制符:
d、i:输入带符号的十进制数。
o:输入无符号八进制数。
x、X:输入无符号十六进制数,无论大小写。
u:输入无符号十进制数。
c:输入单个字符。
s:输入字符串。
f:输入实型,小数形式指数形式均可。
e、E、g、G:与f作用相同,不论大小写。
*符:表示指定的输入项在读入后不赋给相应的变量。
如scanf(“%d%*d”,&a,&b);执行后变量b将得不到输入值。
也可以在格式控制符中加入正数,如scanf(“%3d”,&a),那么当输入1234时,只截取123赋给变量a.但是不能加入实数,不能指定输入精度,如scanf(“%3.2f”,&a),这是非法的。
附加格式说明符表:
l/L:输入一个长整型数据。(%ld %lo)。
h:输入短整型数据。(%hd,%ho)。
n:用于指定输入数据所占的宽度,上面以有所介绍。
*:前面以介绍过。
输入时间隔符:
①、空白字符:scanf函数在读操作中会略去一个或多个空格符,直到第一个非空白符出现为止,如scanf(“%d%d”,&a,&b),用户可以在输入时输入任意多的空格,如: 6 8,都不影响scanf函数获取,scanf函数会忽略这些空格。空白字符可以是空格、tab、newline等。
②、空白字符:非空白字符会使scanf函数在读入时剔除掉与这些非空白字符相同的字符。如scanf(“%d,.,%d”,&a,&b),输入6,.,8,或6 , . , 8等,那么之间的,.,将会被忽略,但是在用户输入时必须带上,.,,而且只能在中间,否则会出错。
但当输入字符使用%c,空格跟转义均为有效字符,如scanf(“%c%c”,&a,&b),输入s空格m,那么就会出现问题,字符s赋给a,但是并不是字符m赋给b,而是空格赋给b,m字符将被忽略。这一点要注意。
在输入字符串时,如果字符串中有空格,那么当scanf函数检测到第一个空格时,就结束读取。如scanf(“%s”,str(数组名不需要加取址运算符)),当输入i love you时,它只把i赋给str后面就忽略了。但是此时的缓存区中还有love you,此时如果使用getchar()函数就可以读取到剩余的字符,当然了也可以继续使用scanf函数。
运用scanf函数时一定要想到缓存区,比如,有两条输入语句scanf(“%d”,&a);scanf(“%c”,%b);那么在输入第一条语句后,由于需要回车确认结束,那么当第一个数据被赋予变量a以后,回车进入了缓存区,所以下一个输入语句不需要再输入,scanf函数直接就将回车符赋给变量b,所以就出现了错误,回车就赋给了变量b.解决这问题很简单,只要在两条语句中加一句getchar()即可,也可以使用fflush(stdin)即可。
其实运用scanf函数并不难,只要想到缓存区即可。
更多山东编程培训相关资讯,请扫描下方二维码