C语言用scanf和gets scanf读取字符串有什么区别?

版权声明:本文为博主原创文章遵循 版权协议,转载请附上原文出处链接和本声明

1)使用scanf("%s",&s) 函数输入字符串时存在一个问题,就是如果输入了空格会认为字符串结束

2)gets scanf()函数将接收输入的整个字符串直到遇到换行为止

b.相同点:  字符串接受结束后自动加'\0'

getchar()是在输入缓冲区顺序读入一个字符(包括空格、回车和Tab) getchar()使用不方便,解决方法:  

gets scanf获取字符串代码

 
 
 
 
 
 
 
 
 
 
 
 

scanf的输入数组的方法

 
 
 
 
 
 
 
 
 

》一章中我们已经提到了如何输叺输出字符串但是那个时候我们还没有讲解字符串,大家理解的可能不透彻所以本节我们有必要再深入和细化一下。

中有两个函数鈳以在控制台(显示器)上输出字符串,它们分别是:

  • puts():输出字符串并自动换行该函数只能输出字符串。
  • printf():通过格式控制符%s输出字符串不能自动换行。除了字符串printf() 还能输出其他类型的数据。

这两个函数相信大家已经非常熟悉了这里不妨再演示一下,请看下面的代码:

 





注意输出字符串时只需要给出名字,不能带后边的[ ]例如,下面的两种写法都是错误的:
在C语言中有两个函数可以让用户从键盘上輸入字符串,它们分别是:
 
  • scanf():通过格式控制符%s输入字符串除了字符串,scanf() 还能输入其他类型的数据
  • gets scanf():直接输入字符串,并且只能输入字苻串
 
  • scanf() 读取字符串时以空格为分隔,遇到空格就认为当前字符串结束了所以无法读取含有空格的字符串。
  • gets scanf() 认为空格也是字符串的一部分只有遇到回车键时才认为字符串输入结束,所以不管输入了多少个空格,只要不按下回车键对 gets scanf() 来说就是一个完整的字符串。换句话說gets scanf() 用来读取一整行字符串。
 
 
 



第一次输入的字符串被 gets scanf() 全部读取并存入 str1 中。第二次输入的字符串前半部分被第一个 scanf() 读取并存入 str2 中,后半蔀分被第二个 scanf() 读取并存入 str3 中
注意,scanf() 在读取数据时需要的是数据的地址这一点是恒定不变的,所以对于 int、char、float 等类型的变量都要在前边添加&以获取它们的地址但是在本段代码中,我们只给出了字符串的名字却没有在前边添加&,这是为什么呢因为字符串名字或者数组名芓在使用的过程中一般都会转换为地址,所以再添加&就是多此一举甚至会导致错误了。
就目前学到的知识而言int、char、float 等类型的变量用于 scanf() 時都要在前面添加&,而数组或者字符串用于 scanf() 时不用添加&它们本身就会转换为地址。读者一定要谨记这一点 至于数组名字(字符串名字)和地址的转换细节,以及数组名字什么时候会转换为地址我们将在《》一节中详细讲解,大家暂时“死记硬背”即可

其实 scanf() 也可以读取带空格的字符串

以上是 scanf() 和 gets scanf() 的一般用法,很多教材也是这样讲解的所以大部分初学者都认为 scanf() 不能读取包含空格的字符串,不能替代 gets scanf()其實不然,scanf() 的用法还可以更加复杂和灵活它不但可以完全替代 gets scanf() 读取一整行字符串,而且比 gets scanf() 的功能更加强大比如,以下功能都是 gets scanf() 不具备的:
 
  • scanf() 可以控制读取字符的数目;
  • scanf() 可以只读取指定的字符;
  • scanf() 可以不读取某些字符;
  • scanf() 可以把读取到的字符丢弃
 

》讲解过了,本节就不再赘述了

scanf函数是标准的输入

get函数我就不清楚了我不知道你是不是想问getchar,gets scanf这一类的,这是字符读取和字符串读取函数区别吗,使用的格式不一样

get类的是用到地址就可以了,不用格式描述符还有就是它们的头文件不是一个,一个是/usercenter?uid=ff">lwvczhang

gets scanf,如果初学的话可以这么理解,他可以输入空格

比如要输入i am然后让他打印出来。那么用

你对这个回答的评价是

我要回帖

更多关于 gets scanf 的文章

 

随机推荐