c语言的输入

常用到scanf和gets,getchar等

记录一下刷题时遇到的一些问题

scanf

输入整形 scanf("%d",&n);

当连续输入多个整形 中间用空格或者换行隔开时 会自动读取下一个有效的整形 空格 换行不会影响

在这中间getchar是可以得到中间的空格或是换行的 但在一堆scanf以后 getchar只会得到最后的字符 中间那些会被丢弃

输入字符 scanf("%c",&c);

对于任何字符都会被读取 不存在丢弃的情况

输入字符串

char s[10];

scanf("%s",s); 这里不用加& 放一个字符数组地址

也是遇到空格或是换行结束一次,且会自动在末尾加\0 所以一般把数组容量设置大一点

读取用空格或换行间隔的字符串时可以连续使用scanf或者scanf("%s%s") 都是没有问题的

中间的换行啥的会被忽略掉

同样在这中间也可以用getchar得到空格或是换行符

若在最后getchar会得到最后的信息 即若是 abc def空格回车 则两次getchar分别得到最后的空格和回车,若再最后得到int 则两个字符串后任意多个空格回车啥的都会丢掉 跟上边同理 中间可接受 但后面接受只能得到int后边的字符

gets(s)

这个东西危险 因为不管输入的字符串多大 他都会往你指定的数组里边塞 所以可能出现容量不够 最后的\0放不下的问题 正常情况会在最后加个\0的 然后访问就可能越界 甚至运行出错(可能涉及到分配栈的问题 还没有深考虑)

空格不会停止 也放进去 结束符只有换行 另外会吃掉每次的换行符 所以最后若getchar会得到你换行后的下一个字符

先到这里

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值