🚀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、注意细节
- 占位符一定要和想要读取的数据类型相对应,否则会出现很多bug
- 使用%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()适合按照指定格式读取不同类型的数据。
在实际开发中,应根据具体需求选择合适的函数,并注意处理输入错误和边界情况。
今天的分享就到这里结束啦!
!!!!!!!!! !! !谢谢观看!!!!!!!!!!
!!!!!!!!!!!!!记得三连哦!!!!!!!!!!!!!!