gets()函数
函数原型:char* gets(char*)
头文件:stdio.h
功能:从标准输入设备读取字符串,可以无限读取,不会判断上限,直至接收到换行符或EOF时停止(所以应该保证buffer的空间足够大,以免发生溢出),并将读取的结果存放在指定的字符数组(传入的作为参数的数组指针)中,换行符不作为读取的字符串的内容,gets()并不将换行符存入缓冲区,读取的换行符被转换为"\0"空字符,由此来结束字符串。
返回值:读入成功,返回参数数组的指针;读入过程中遇到EOF或发生错误,返回NULL指针。
TIPS:gets()读取到"\n"(我们输入的回车)停止读取,但是会舍弃\n,然而,与其对应使用的puts()函数,却在输出字符串的时候自动换行。如果输入的第一个字符就是换行符,则字符串就会被置为空串。
如果gets(s)函数中的参数指针为一个单个字符的字符串指针,编译链接不会有错误,但运行后内存溢出错误。
由于可以无限读取,所以在2011年12月,ANSI 采纳了 ISO/IEC 9899:2011 标准,标准中删除了 gets()函数,使用一个新的更安全的函数gets_s()替代。
回车不会留在输入缓冲区中。
scanf()函数
函数原型:int scanf("%s",字符数组名或字符指针)
头文件:stdio.h
功能:自不解释。
返回值:返回正确读入的数据的数量。
TIPS:在使用scanf()读入字符串的时候,scanf()在遇到空格,回车,TAB键都会认为输入结束,空格后的字符将作为下一项输入处理,所以读取的字符串中不能含有空格。字符串读入结束后自动加'\0',但是回车,空格,TAB键仍会留在输入缓冲区中。
scanf()在读取数字的时候会舍弃换行符,因此可以用while()+getchar()来清空输入缓冲区。
getchar函数
函数原型:char getchar()
头文件:stdio.h
功能:当程序调用getchar()时,程序等待用户输入。用户输入的字符将被存放在输入缓冲区中,直到用户按回车键为止(回车字符也放在缓冲区中)。当用户键入回车,getchar才开始从stdin流中每次读入一个字符。getchar函数的返回值是用户输入的第一个字符的ASCII码,如出错返回-1.且将用户输入的字符回显到屏幕。
TIPS:
与其相匹配的输出函数putchar() 其功能是在显示器上输出单个字符。其一般形式为: putchar(字符变量) 例如:
putchar('A'); 输出大写字母A
putchar(x); 输出字符变量x的值
putchar('\n'); 换行 对控制字符则执行控制功能,不在屏幕上显示。
putchar()这个函数不会检查要输出的字符的真正范围。 在使用的时候需要注意,输出变量的范围是不是一个字符的范围内,只有在一个字符的范围内才能正确输出,不然肯定会出错。