1:scanf
scanf()是在C语言中最常用的输入函数,它需要我们严格按照要求进行输入,除非你用对scanf()使用了正则表达式;对于scanf(),当它遇到空格、回车、或者Tab键时,都会自动停止输入,剩下的内容逗留在缓冲区中,所以如果需要输入字符串,不推荐使用它。
关于正则表达式:
[ ]是个集合的标志,%[ ]特指读入此集合所限定的那些字符,比如%[A-Z]是输入大写字母,一旦遇到不在此集合的字符便停止。
如果集合的第一个字符是“”,这说明读取不在””后面集合的字符,既遇到”^”后面集合的字符便停止(这就是scanf函数里的正则表达式应用)。
注意:此时读取的字符串是可以含有空格的。
例如:
“%[^\n]”则表示当遇到回车时才结束输入。
“%[A-Z]”则表示输入A到Z的任何字符(包括回车、空格)都会停止。
“%[0-9a-zA-Z]”则表示只能输入数字加字母
2:gets
gets()主要用来接收字符串,可以接收空格,遇到’\n’时结束,但不接收’\n’,把 ‘\n’留存输入缓冲区;把接收的一串字符存储在形式参数指针指向的空间,并在最后自动添加一个’\0’。
相对于scanf(),我觉得gets()的使用更加的简单,当你需要输入那个字符串的时候,就直接gets(str)就可以了。
可以无限读取,不会判断上限,因此使用gets不安全,可能会造成溢出。
3:getchar
getchar()主要用来接收单个字符,不管是空格或者回车都可以接收
可以用作特别字符作为结束的时候进行判断。
例如:
(c=getchar())!=’\n’ 则表示遇到回车的时候结束接收字符。
空格 | 换行 | TAB | |
---|---|---|---|
scanf("%s") | 结束读取,但不丢弃,仍在缓冲区 | 结束读取,但不丢弃,仍在缓冲区中 | 结束读取,但不丢弃,仍在缓冲区中 |
scanf("%c") | 读入 | 读入 | 读入 |
getchar() | 读入 | 读入 | 读入 |
gets() | 读入 | 读入,转换成’\0’ | 读入 |