关于数组读取结束的小问题
最近在做PTA上的一道题时遇到了数组输入结束判断问题导致循环出现异常的问题。
试了很多遍最后发现数组的结束不是回车/n 而是数组结束标志/0
char cont[1000001]={0};
scanf("%s",cont);
for(int i=0;cont[i]!='\n';i++);
测试了一下发现gets和scanf("%s",a)都是不读取回车的fgets有时候读有时候不读(如图)
但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
读取长度比实际长度多2个以上是读回车的
要小心啊