当前位置: 代码迷 >> 综合 >> scanf,gets,getchar,fgets中的一些细节
  详细解决方案

scanf,gets,getchar,fgets中的一些细节

热度:28   发布时间:2024-01-06 07:20:29.0

1.getchar

 

int getchar ( void );

 

Get character from stdin

 

Returns the next character from the standard input (stdin).

 

It is equivalent to calling getc with stdin as argument.

 

getchar什么字符都会读,包括空白符和换行符,并且一次只读一个字符

getchar()直到遇见ENTER 键才返回,返回值是第一个字符,但是后面的字符也不会被丢弃,而是保存在一个缓冲区内。


2.fgetsgets

 

fgets函数fgets函数用来从文件中读入字符串。fgets函数的调用形式如下:fgetsstrnfp);此处,fp是文件指针;str是存放在字符串的起始地址;n是一个int类型变量。函数的功能是从fp所指文件中读入n-1个字符放入str为起始地址的空间内;如果在未读满n-1个字符之时,已读到一个换行符或一个EOF(文件结束标志),则结束本次读操作,读入的字符串中最后包含读到的换行符。因此,确切地说,调用fgets函数时,最多只能读入n-1个字符。读入结束后,系统将自动在最后加'\0',并以str作为函数值返回。

 

gets()将删除新行符, fgets()则保留新行符.

 

要去掉fgets()最后带的“\0",只要用 s[strlen(s)-1]='\0';即可。

 

fgets不会像gets那样自动地去掉结尾的\n,所以程序中手动将\n位置处的值变为\0,代表输入的结束。

gets  fgets`:读取指定大小的数据,避免gets函数从stdin接收字符串而不检查它所复制的缓存的容积导致的缓存溢出问题

以下插入一段程序

分别执行结果如下,先是fgets

然后是gets

可以发现,输入as   fgets的长度为3,gets的为2,并且输出时,fgets多出了换行,在输入数据时,把换行符存入字符串中了。

3.scanf

scanf函数是一个标准库函数,它的函数原型在头文件“stdio.h”中,scanf函数的一般形式为:scanf(“格式控制字符串”, 地址表列);
其中,格式控制字符串的作用与printf函数相同,但不能显示非格式字符串,也就是不能显示提示字符串。地址表列中给出各变量的地址。地址是由地址运算符“&”后跟变量名组成的。

例如:&a、&b分别表示变量a和变量b的地址


注意:
(1)使用scanf输入字符串一定不能写成“scanf("%s",&str);”,因为str是数组名,作为一个地址存在,是不能再进行“&”运算的。

(2)scanf%s接收字符串的时候,遇到空格就会停止。如果想输入多个单词,需要多次调用scanf()