gets与scanf_C语言中两种字符串输入方法比较

在C语言中存在两种字符串输入方法:

第一种:gets()函数
 --程序1---
  1 #include <stdio.h>
  2 #include <string.h>
  3 int main()
  4 {
  5     int i;
  6     char str[20];
  7     for (i=0; i<20; i++)
  8     {
  9         str[i] = 'a';
 10     }
 11     gets(str);
 12     printf("字符串str长度:%d\n", strlen(str));
 13     printf("打印字符串:%s\n", str);
 14     for (i=0; i<20; i++)
 15     {
 16         printf("第%d个字符:%c\n", i+1, str[i]);
 17     }
 18     return 0;
 19 }
     
第二种:scanf()函数
 --程序2-----------
  1 #include <stdio.h>
  2 #include <string.h>
  3 int main()
  4 {
  5     int i;
  6     char str[20];
  7     for (i=0; i<20; i++)
  8     {
  9         str[i] = 'a';
 10     }
 11     scanf("%s", str);
 12     printf("字符串str长度:%d\n", strlen(str));
 13     printf("打印字符串:%s\n", str);
 14     for (i=0; i<20; i++)
 15     {
 16         printf("第%d个字符:%c\n", i+1, str[i]);
 17     }
 18     return 0;
 19 }
 
如果输入:hello回车
--程序1输出------------                         
字符串str长度:5                       
打印字符串:hello                                                    
第1个字符:h                     
第2个字符:e                                                               
第3个字符:l                                                                                           
第4个字符:l                                                           
第5个字符:o                                                                 
第6个字符:                                                       
第7个字符:a                                                             
第8个字符:a                                                           
第9个字符:a                                                           
第10个字符:a                                                                             
第11个字符:a                                                                    
第12个字符:a                                                                                                              
第13个字符:a                                                                         
第14个字符:a                                                                                       
第15个字符:a                                                                                  
第16个字符:a                                                                          
第17个字符:a                                                                         
第18个字符:a                                                                               
第19个字符:a                                                                                              
第20个字符:a                                                                                      
--程序2输出---------
字符串str长度:5
打印字符串:hello
第1个字符:h
第2个字符:e
第3个字符:l
第4个字符:l
第5个字符:o
第6个字符:
第7个字符:a
第8个字符:a
第9个字符:a
第10个字符:a
第11个字符:a
第12个字符:a
第13个字符:a
第14个字符:a
第15个字符:a
第16个字符:a
第17个字符:a
第18个字符:a
第19个字符:a
第20个字符:a
如果输入:hello空格world回车
--程序1输出----------------
字符串str长度:11
打印字符串:hello world
第1个字符:h
第2个字符:e
第3个字符:l
第4个字符:l
第5个字符:o
第6个字符:
第7个字符:w
第8个字符:o
第9个字符:r
第10个字符:l
第11个字符:d
第12个字符:
第13个字符:a
第14个字符:a
第15个字符:a
第16个字符:a
第17个字符:a
第18个字符:a
第19个字符:a
第20个字符:a
--程序2输出--------------
字符串str长度:5
打印字符串:hello
第1个字符:h
第2个字符:e
第3个字符:l
第4个字符:l
第5个字符:o
第6个字符:
第7个字符:a
第8个字符:a
第9个字符:a
第10个字符:a
第11个字符:a
第12个字符:a
第13个字符:a
第14个字符:a
第15个字符:a
第16个字符:a
第17个字符:a
第18个字符:a
第19个字符:a
第20个字符:a
分析:对于scanf()会过滤空格,不接受空格后面的字符。但gets()会接受。2个函数在给变量赋值时都会将
        字符串最后一位变为'\0'。例如上面输入  hello回车  后,第6个字符打印时不显示,其实是'\0'这个字
        符,这个字符在屏幕上打印不出来。如果我们输入一串超过20个的字符串,程序运行时会显示错误。
那么如何能让scanf()能接受空格呢?可以在scanf()进行格式控制
 

转载于:https://my.oschina.net/ctf/blog/135776

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值