【C语言】常用的输入函数详解——scanf() gets() getchar()

🚀write in front🚀
🔎大家好,我是gugugu。希望你看完之后,能对你有所帮助,不足请指正!共同学习交流🔎
🆔本文由 gugugu 原创 CSDN首发🐒 如需转载还请通知⚠
📝个人主页:gugugu-----CSDN博客
🎁欢迎各位→点赞👍 + 收藏⭐️ + 留言📝​
📣系列专栏:gugugu的精品博客——CSDN
✉️我们并非登上我们所选择的舞台,演出并非我们所选择的剧本📩

前言

写作业经常不知道怎么输入吗?有空格不知道怎么处理吗?只会scanf函数吗?
看完这篇文章,你的问题都会解决
hhh
感觉怎么像江南皮革厂的感觉
稍微皮一下,开始今天的分享!


在这里插入图片描述

一、常见的输入函数

常见的输入函数主要是标题里提到的四个函数
==scanf gets getchar ==

相信很多新手朋友都在scanf,getchar,gets的使用上产生过困惑,尤其是处理字符和字符串时,博主先前就遇到这样的困惑,但一直都是一知半解,今天终于经过一番折腾弄清了它们的用法和区别,下面我们就详细来看看。

二、scanf()

先从最简单的scanf开始介绍

1、简单介绍一下

  • scanf()函数用于从标准输入中按照指定格式读取数据。根据占位符的不同,它可以读取不同类型的数据,如整数、浮点数和字符串。scanf()函数根据格式字符串解析输入,并将解析结果存储到相应的变量中。但是,scanf()函数也存在一些问题,如输入缓冲区溢出和格式错误等。

2、书写格式

char a;
scanf("%c",&a);
/*读入一个字符,注意&不能漏*/

这里是输入单个字符,当然啦,根据占位符的不同,会有不同的效果的

3、注意细节

  1. 占位符一定要和想要读取的数据类型相对应,否则会出现很多bug
  2. 使用%s读取字符串时,读取规则是这样的:

从第一个非空白字符开始读取,直到遇到一个空白字符结束(空白字符有空格符、回车符和换行符以及制表符等)
所以使用scanf输入字符串时不能够带有空格等,这就存在一定局限性
3.& 取地址符不能够掉

4、举个例子看看QAQ

在这里插入图片描述

a、 先看一下数字的输入吧

#include <stdio.h>
int main()
{
   int i = 0;
   scanf("%d", &i);
   printf("%d\n", i);
   return 0;
}

在这里插入图片描述
b、再来看一下字符的输入

#include <stdio.h>
int main()
{
	char i = 0;
	scanf("%c", &i);
	printf("%c\n", i);
	return 0;
}

在这里插入图片描述
c、字符串输入看看

#include <stdio.h>
int main()
{
	char ch[10] = { 0 };
	scanf("%s", ch);
	printf("%s", ch);
	return 0;
}

这里是没有空格的
在这里插入图片描述

再看看有空格的

在这里插入图片描述
这里真的很重要,强烈建议,字符串输入不要使用scanf函数!!!
在这里插入图片描述

三、gets()

1、简单介绍一下

gets()函数用于从标准输入中读取一行字符串。它会读取换行符之前的所有字符,并将这些字符存储到一个字符数组中。但是,gets()函数存在安全性问题,因为它无法限制输入的长度,可能会导致缓冲区溢出。

2、书写格式

char a[10];
gets(a);
/*读入一个字符串*/

3、注意细节

1、使用gets函数时,要注意在创建数组时给数组合适的大小,否则很容易造成溢出的问题

正确示范
在这里插入图片描述
这里是正确示范,100就是给了一个合适的大小,当然得根据实际情况使用

错误示范
如果不给这个100,会怎么样呢?
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
编译器报错了。

2、gets()函数在读取字符串时不会读取换行符,也就是enter键
在这里插入图片描述

用这段代码作为例子
在这里插入图片描述
换行符被吞掉了hhh

4、举个例子看看吧

#include <stdio.h>
int main()
{
	char ch1[80] = { 0 };
	gets(ch1);
	char ch2[80] = { 0 };
	gets(ch2);
	printf("%s", ch1);
	printf("%s", ch2);

	return 0;
}

这里就不举例了,上面的正确示范举例非常清晰啦

四、getchar()

1、简单介绍一下

getchar()函数用于从标准输入中读取一个字符。它通常用于读取单个字符或者在循环中逐个读取字符,直到遇到换行符或文件结束符。getchar()函数返回读取的字符的ASCII码值。

2、书写格式

a、输入单个字符

char c;
c=getchar();
/*读入一个字符*/
getchar();

b、输入字符串

char ch[80]={0};
int i=0;
while((ch[i]=getchar())!='\n')
{
   i++;
}

3、注意细节

1、对于你输入的任何数据,getchar() 都会把它们当作是字符来处理,而且每次只获取一个字符。
eg
你输入“11”,getchar() 并不会把它当做“11”来处理,而是把它当做两个‘1’来处理

在这里插入图片描述

下面这段是拓展,有兴趣可以读一下

对于换行符(\n)和回车符(\r)的区别我在这里简单说一下。
换行符(\n)的作用是换一行输出。回车符(\r)的作用是把光标回到该行的行首。这两者的概念之所以有很多人会疑惑,这是由于我们平时的习惯称呼导致的。我们习惯性的把键盘上面那个换行回车键称为回车键,事实上它应该是两个键的混合(\r\n)。
同时也因为我们现在的开发环境便捷导致的,在一般的开发环境下面换行符(\n)就已经相当于同时具备换行回车(\r\n)的功能了,所以我们平时对于(\n)用的就比较多,(\r)就比较少用了。
但是如果在一些不那么高级的开发环境(例如小型嵌入式系统)下面的话,情况就不一样了,换行符(\n)就仅仅只是换行而已,你原本的光标在一行的哪个位置,就还在新行的哪个位置。你若想要光标回到行首,你就得手动输出回车符(\r)。

2、==用getchar()的返回值做判断的时候,需要考虑到是否存储保留的问题。==无论你是否接收getchar()的返回值,只要你调用了getchar(),那么缓存区中就会被读取走一个字符。

4、举个例子看看

就用字符串举例啦
会了字符串输入,字符的输入肯定也会

#include <stdio.h>
int main()
{
	int i = 0;
	char ch[80] = { 0 };
	while ((ch[i] = getchar()) != '\n')
	{
		i++;
	}
	printf("%s\n", ch);
	return 0;
}

在这里插入图片描述

五、总结一下下

getchar()适合读取单个字符
gets()适合读取字符串(但不安全,溢出问题)
scanf()适合按照指定格式读取不同类型的数据。

在实际开发中,应根据具体需求选择合适的函数,并注意处理输入错误和边界情况。


今天的分享就到这里结束啦!
!!!!!!!!! !! !谢谢观看!!!!!!!!!!
!!!!!!!!!!!!!记得三连哦!!!!!!!!!!!!!!

在这里插入图片描述

  • 32
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 12
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值