scanf函数和getchar函数在输入时是读取到“回车”就结束的,而回车符留在了输入流缓冲区,当下一次输入仍用scanf或者getchar读入枝陵一个字符的时候,则会把缓冲区的回车符读取从而导致结果不正确,但若第二次是用scanf输入一个数字的时候,scanf则会跳过空白字符,可以正常输入。
在用scanf读入字符串如scanf("%s",str)时,在输入的过程中,如字符串内有空格如hello world,则只能读取到hello,因为scanf使用%s输入方式时,认为遇到空格、TAB、回车键则认为输入结束,因而只能读取无空格的字符串。
第一:要注意不同的函数是否接受空格符、是否舍弃最后的回车符的问题!
读取字符时:
scanf()以Space、Enter、Tab结束一次输入,不会舍弃最后的回车符(即回车符会残留在缓冲区中);
getchar()以Enter结束输入,也不会舍弃最后的回车符;
读取字符串时:
scanf()以Space、Enter、Tab结束一次输入,不舍弃最后的回车符。
gets()以Enter结束输入(空格不结束),接受空格,会舍弃最后的回车符!
当你看明白了上面的,再看我给你下面的解释
//----------------------------------------
当程序运行到scanf(“%s%s”,s[0],s[1])语句时,你输入aaaa bbbb<CR>时,按照上面的,scanf函数在以%s形式输入字符串时遇到空格或回车会结束输入,所以aaaa传给了s[0],然后bbbb传给了s[1],但是最后你输入的这个回车字符不被scanf函数丢散差弃,留在了输入缓冲区中
然后当程序运行到gets(s[2])时,会读取到缓冲区中残留的这个回车,而gets函数遇到回车就代表输入结束,所以传给s[2]的是一个空字符串。
然后getss([3])你输入的cccc dddd就全部传给s[3]了,因为gets函数遇到空格不结束
这样你该明白了吧,还有puts函数输出猛掘戚的时候是自动换行的
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)