C语言的其他输入输出

· · 个人记录

除了scanf(),printf(),C语言还有其它的输入输出函数。

1.getchar()

getchar()类似于scanf("%c"),从缓冲区(什么是缓冲区 https://blog.csdn.net/weixin_73914025/article/details/130333179 简单来说就是你输入到控制台的东西)读入一个字符。

它俩的共同点是都很“蠢”,会把空格、换行符等字符一并读入,用他们输入之前如果有其它输入,需要用getchar()函数把其他输入留下的换行符或空格读入;

不同点是,getchar()的括号内没有任何参数,getchar()是返回输入的字符(比如输入字符'a'就返回'a'的值),不会直接给变量赋值,可以用ch=getchar()给ch赋值(假设ch是一个char类型的变量),相当于scanf("%c",&ch)。

2.putchar()

putchar(ch),类似于printf("%c",ch),以字符的形式输出变量,括号内填字符型变量或常量(如'a'),它的返回值是输出的字符。

3.gets()

gets(s),类似于scanf("%s",s) (假设s是一个字符型数组,如char s[10000]),与scanf("%s",s)不同的是,它会读取一整行(包括空格,换行符)字符作为字符串;

scanf("%s")是“聪明的”,它不会读入空格、换行符等。 而gets()也很“蠢”,它会读入空格、换行符等。用gets()输入之前如果有其它输入,需要用getchar()函数把其他输入留下的换行符读入。

gets(s);
printf("%s",s);
scanf("%s",s);
printf("%s",s);

在控制台输入"Hello World"(包含空格),前者生成的程序会输出"Hello World",而后者会输出"Hello"。

需要注意的是,由于曾经有人利用gets()函数的漏洞做了一些不太好的事情,C语言删除了gets()函数并用gets_s()函数替代,为了保证在此之前的代码仍然可用,部分编译器(如gcc等)的保留了gets()函数,但有些编译器(如Visual Studio)没有保留gets()函数。

4.puts()

puts(s)类似于printf("%s",s),不同的是,puts()会自动在结尾加换行符(也就是说不用在字符串结尾加'\n'了)