【Linux C】scanf和Linux C中的gets函数警告

在C语言中,字符数组的输入有两种方法: 
①逐个字符输入 
②一次性输入整个字符串

1.逐个字符输入 
  使用“%c”,例如: 
  这里写图片描述 
  

2.一次性输入整个字符串 
  使用“%s”,例如: 
  这里写图片描述

  需要注意的是,在这里定义的str数组的长度为10,则输入的字符串的长度应小于定义的长度10.若输入hello,则系统自动在输入的hello后面加一个’\0’结束符。 
   
  若利用一个scanf输入多个字符串,则要用空格分隔输入的字符串。例如: 
  这里写图片描述 
   
  由于定义的字符数组长度比输入的字符串的长度要长,所以数组中未被赋值的元素的值会被自动置’\0’。利用空格分隔输入的字符串,运行之后结果如下: 
  这里写图片描述

  但若将程序改为如下图所示: 
  这里写图片描述

  此时运行结果如下: 
  这里写图片描述

  在这里,空格被认为是字符串之间的分隔符,所以只有空格前的Hello被送入str,导致输出的结果不是我们想要的结果。 
  若要得到我们想要的结果,可以用gets函数,用于输入字符串。 
  如下图代码: 
  这里写图片描述

  运行结果如下: 
  这里写图片描述

  此时便得到了想要的结果。然而同时在编译过后出现了一个警告,即“warning:the ‘gets’ function is dangerous and should not be used.” 
  原因是在程序中使用了gets函数,而Linux下的gcc编译器不支持这个函数。可以使用fgets函数替代gets函数解决这个问题。

  另外,如果代码如下: 
  这里写图片描述

  则此时输出结果如下: 
  这里写图片描述

  即当程序运行并且输入时,当输入了num1,便隔过ch,直接输入num2。因为ch是字符型变量,当输入了num1后再回车,ch便被认为输入了’\n’,所以出现了上述情况。解决办法是在输入ch之前加一个getchar函数,如图: 
  这里写图片描述

  此时结果为下图,便是我们想要的结果了。 
  这里写图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值