c语言的输入

本文介绍了C语言中常用的输入函数scanf、gets和getchar的使用细节。scanf用于读取整型、字符和字符串,能处理空格和换行,而getchar能捕获空格和换行,但可能会丢失中间的字符。gets在读取字符串时有潜在的安全风险,因为它不会限制输入长度,可能导致数组越界。在处理字符串输入时,可以连续使用scanf或利用getchar来获取空格分隔的字符串。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

常用到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会得到你换行后的下一个字符

先到这里

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值