关于C语言读取字符的函数-scanf函数getchar函数/gets函数

关于输入缓冲区

这里简单了解,不做过多描述。

        当在键盘上输入字符/字符串后,输入的字符/字符串都会被缓冲区读取后放进缓冲区内储存,而之后我们调用scanf函数/getchar函数/gets函数操作时都需要在缓冲区内取出之前存入的字符/字符串。

如图例:

 scanf函数:从键盘中读取数据,读取失败则返回EOF(-1)。

getchar函数:读取/获取一个字符,返回值为int类型,读取失败则返回EOF。

 putchar函数:输出一个字符,读取失败则返回EOF。

gets函数:读取一个字符串,读取失败则返回NULL指针。

  在这里可以看出来,

         scanf函数读取不了空格后的数据,但是不仅可以读取字符/字符串还可以读取整数。

         getchar函数一次只能读取一个字符,也可以把一个整数当作字符读取。

         putchar函数类似于printf函数打印。

         gets函数可以读取字符/字符串,还可以把整数以字符串的形式读取,另外空格后的数据也可以被gets函数读取。

        此外,以上函数一般都是读取到 \n,就不再向后读取。

 通过以下几段代码,可以更加充分的理解:

1.请问运行以下代码会发生什么?

#include<stdio.h>

int main()
{
	int ch = 0;

	while ( (ch = getchar() ) != EOF)
	{
		putchar(ch);
	}

	return 0;
}

       这里的逻辑是,在while循环内,getchar函数读取变量ch,只要不读取失败,就会一直读取,然后putchar打印出来,读取失败则不进入while循环。ctrl+z+回车 结束程序。

效果图:

这段代码有什么作用? 其实它常常被我们用来清理缓存区。

比如接下来实现一段代码逻辑,

改进如下:​​​​​​​

      说明:为什么会有 \n,因为每次键盘输入后都需要敲一下回车键/enter键,而回车键就相当于在输入缓冲区内存入一个\n。


以上仅供参考

  • 14
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. getchar()函数:从标准输入读取一个字符(包括空格、制表符、回车符等),返回值为int类型,表示读取到的字符的ASCII码值。 2. scanf()函数:格式化输入函数,可以读取各种数据类型,包括字符型。使用%s格式控制符读取字符串时,会自动忽略前面的空格和制表符,直到遇到第一个非空格字符为止。 3. gets()函数读取一行字符串,包括空格和制表符,直到遇到回车符为止。该函数不安全,容易发生缓冲区溢出,已经被废弃。 4. fgets()函数读取一行字符串,包括空格和制表符,读取的最大字符数由第二个参数指定,读取到的字符串会自动添加一个结束符'\0'。该函数gets()更安全,可以避免缓冲区溢出。 5. getc()函数:从指定文件中读取一个字符,返回值为int类型,表示读取到的字符的ASCII码值。该函数getchar()函数类似,但可以从指定文件中读取字符。 6. fgetc()函数:从指定文件中读取一个字符,返回值为int类型,表示读取到的字符的ASCII码值。该函数与getc()函数类似,但是可以指定读取哪个文件。 7. getchar_unlocked()函数:与getchar()函数类似,但是不进行线程锁定,因此速度更快。 8. getw()函数:从指定文件中读取一个整数,返回值为int类型,表示读取到的整数。该函数通常用于读取二进制文件。 9. scanf_s()函数:安全的格式化输入函数,可以读取各种数据类型,包括字符型。与scanf()函数类似,但可以指定读取的最大字符数,避免缓冲区溢出。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值