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