c语言scanf输入字符串为何要加getchar

这个代码是运行是没有问题的的。问题在于第一次写主函数中的17.19行时没有加18行的getchar(),程序运行到请输入字符串处,输入后回车就会将回车当做需要检索的字符输入到第二个scanf里。scanf 不是不接收\n吗?加了getchar()接收\n那什么当做第一个Sscanf的结束标志呢?

第一个scanf读入字符串后,换行符留在输入缓冲区中,被第二个scanf读入(scanf的格式字符串为%c时会读取一切字符包括换行和回车),因而造成错误。可在第一个scanf结束后加入一行while(getchar()!='\n');清空输入缓冲区。追问

那既然\n被当做字符处理了为什么不是把\n 继续当做字符串的一部分呢?

追答

以%s方式读取字符串时,scanf不断向后检测输入缓冲区中的字符,直到遇到空白符号(空格、制表符或回车)。此时停止读入,将空白符号之前的字符串写入第二个参数给定的内存空间中,并在末尾写入\0。空白符号仍停留在输入缓冲区中。

温馨提示:答案为网友推荐,仅供参考

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网