c语言数组读取结束的小问题

关于数组读取结束的小问题

最近在做PTA上的一道题时遇到了数组输入结束判断问题导致循环出现异常的问题。
试了很多遍最后发现数组的结束不是回车/n 而是数组结束标志/0

    char cont[1000001]={0};
    scanf("%s",cont);
    for(int i=0;cont[i]!='\n';i++);

测试了一下发现gets和scanf("%s",a)都是不读取回车的fgets有时候读有时候不读(如图)
可以看到scanf是不读的
gets也是
但fgets就不一样了,fgets(arr,n,stdin)是最长读取n-1个字符,包括回车,如果实际长度超出n-1就只读n-1个。

例如:

char a[5];
fgets(a,5,stdin);
如果输入1234则实际读取到的就是1234
如果输入123则实际读取到的是123\n
如果输入12345则实际读取到的是1234
下面的截图也说明了这一点

而gets()就很随意了,怎么输入怎么读,不会读回车,
数组不够长时会把数组放满

输入1234则实际读取到的就是12
可以看到要输入3个字符yyy只读取四个是不读回车的
读取长度比实际长度多2个以上是读回车的
输入3个字符yyy读5个就会读取回车
5个以上也是读的
要小心啊

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值