大家好,我是讯享网,大家多多关注。
C语言的基本单位是语句,每条语句用来向计算机发送操作指令。但是,有时候,当程序运行时,用户需要手动输入数据并得到运行结果,这时输入输出函数就起了作用。下面逐一介绍C语言提供的各种输入输出函数。至于文件的输入输出功能,这里暂时不讨论,后面会介绍。
一、putchar函数:
putchar(int ch)函数是一个字符输出函数,它的作用是向终端输出一个字符,相当于printf(“%c “,ch)。函数的定义是:int putchar(int ch),它的参数可以是字符变量、整数变量或者常量,比如输出一个字符putchar(‘s ‘)。如果输出正确,此函数返回输出字符的无符号整数值,如果输出错误,则返回e of。
二、getchar()函数:
可以使用getchar函数(不带参数)进行字符输入。当然,有时候也可以使用getch函数和getche函数,但是有一些区别。下面将介绍两者的区别,可以从输入缓冲区中顺序读取一个字符。
测试程序只编写主代码:
char s,m;
s = getchar();
putchar(s);①
m = getchar();②
putchar(m);
上面的代码,在输入一个字符(比如’ G ‘)后,需要按回车键来确认输入的结束,所以当字符G赋给S时,字符enter会被发送到内存缓冲区。据说这个函数会从缓冲区读取字符,所以第二个会直接从缓冲区读取enter,所以M被赋予了enter字符,这个字符往往和原来设置的结果不一样,所以需要在一和二之间加上。以便乘回车,这样就可以继续给m赋值。
三、getch()函数,getche函数和getchar函数的区别:
①库函数不同,getchar是stdio.h中的函数,而getch和getche是conio.h中的函数
②、getch和getche函数是直接从键盘读取的函数。它们没有缓存,缓存里有没有字符跟它们没有关系,而getchar就不一样了,前面说过。
③ getche和getchar你输入的字符会显示在屏幕上,而getch不会显示回来,你输入的字符也不会显示在屏幕上。
④.getch和getche函数不需要按enter来完成输入。当你输入一个字符时,它会被立即读出。确认输入完成不需要其他键(比如enter),而getchar函数需要使用enter键来确认输入完成。
四。字符串输出函数int puts(char *p)函数:
puts函数向终端输出一个字符串,或者将一个字符串放入标准输出流。它的参数是字符指针类型或者字符串常量,输出一行字符串后会自动换行。如果输出正确,则返回输出字符串的长度;如果输出错误,则为0。
puts函数会判断字符串中的结束符’ [22] ‘,一旦遇到,即使后面有字符串也不会输出,比如puts(“abcd[22]efg “),输出结果abcd,会自动换行。
动词 (verb的缩写)字符串输入函数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 = lovePrintf(“%6.3s “,str),结果是
Lov,注意前面有三个空方块,可能不太明显。
如果格式是%-n.ms,区别就是这M个字符在N列的左边。在上面的例子中,结果是lov。注意后面有三个空单元格,一共占了6列。
七、scanf功能:
scanf函数变成了格式输入函数,即数据按照指定的格式输入到指定的变量中。
通用格式是scanf(格式控制,地址列表)。与printf函数不同,printf的第二个参数是变量名列表,而scanf是变量的地址列表。如&a,& B代表变量A,B的地址,&是寻址运算符,所以& amp;A也是表达式。求变量a的地址。
scanf函数本身不能显示提示字符串,虽然需要提示时需要使用printf函数。
scanf功能使用的格式控制器:
d,I:输入一个有符号的十进制数。
o:输入一个无符号八进制数。
X,X:输入无符号十六进制数,不区分大小写。
u:输入一个无符号十进制数。
c:输入单个字符。
输入一个字符串。
f:输入实数形式、小数形式和指数形式。
E,E,G,G:与F的作用相同,不区分大小写。
*符号:表示读入后指定的输入项没有赋给相应的变量。
例如scanf (“%d% * d “,& a,& ampb);执行变量B后,将不会获得输入值。
也可以给格式控制器加一个正数,比如scanf (“%3d “,& A),那么当输入1234时,只截取123赋给变量A,但是不能加实数,也不能指定输入精度,比如scanf (“%3.2f “,& A),这是非法的。
附加格式说明符表:
L/L:输入一个长数据。(%ld %lo).
h:输入短整数数据。(%hd,%ho).
n:用来指定输入数据的宽度,上面介绍过。
*:以前由介绍。
输入时间间隔字符:
①,空白色字符:scanf函数在读取操作中会省略一个或多个空字符,直到第一个非空白色字符出现,比如scanf (“%d% d “,& a,& ampb),用户可以输入任意多个空单元格,比如:6个8个,不会影响scanf函数的获取,scanf函数会忽略这些空单元格。空白字符可以是空、制表符、换行符等。
②、空白字符:非空白字符会导致scanf函数在读入时消除与这些非空白字符相同的字符。如scanf (“%d,,% d “,& a,& ampb),输入6,..、8或6,..、8等。,然后是,。,它们之间将被忽略,但用户必须带上,。,而且只能在中间,否则会出错。
但是,当输入字符使用%c时,空和escape是有效字符,例如scanf (“%c% c “、& a、& ampb),输入s空 case M,那么就有问题了。字符S赋给A,但不是字符M赋给B,而是空 case赋给B,M字符会被忽略。这一点要注意。
当输入一个字符串时,如果字符串中有空个单元格,那么当scanf函数检测到第一个空个单元格时,就结束读取。比如scanf(“%s “,str(数组名不需要地址运算符)),我爱你的时候,它只是把I赋给str,忽略它。但是,此时缓冲中还有爱你。此时,如果使用getchar()函数,就可以读取剩余的字符。当然,你也可以继续使用scanf功能。
使用scanf功能时,必须考虑缓冲区。例如,有两个输入语句scanf (“%d “,& a);scanf(“%c “,% b);然后第一条语句输入后,因为需要回车确认结束,那么当第一条数据给变量A时,就进入缓冲区,这样下一条输入语句就不需要再输入了。scanf函数直接把enter字符赋给变量B,这样就有错误了,把enter赋给变量B,这个问题的解决方法很简单,两句话加一个getchar(),或者用fflush(stdin)。
其实使用scanf函数并不难,只要想想缓存区就知道了。
文章至此,简单介绍到这里,下一篇继续。
本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://51itzy.com/32677.html