c语言scanf输入字符串为何要加getchar
这个代码是运行是没有问题的的。问题在于第一次写主函数中的17.19行时没有加18行的getchar(),程序运行到请输入字符串处,输入后回车就会将回车当做需要检索的字符输...
这个代码是运行是没有问题的的。问题在于第一次写主函数中的17.19行时没有加18行的getchar(),程序运行到请输入字符串处,输入后回车就会将回车当做需要检索的字符输入到第二个scanf里。scanf 不是不接收\n吗?加了getchar()接收\n那什么当做第一个Sscanf的结束标志呢?
展开
1个回答
展开全部
第一个scanf读入字符串后,换行符留在输入缓冲区中,被第二个scanf读入(scanf的格式字符串为%c时会读取一切字符包括换行和回车),因而造成错误。可在第一个scanf结束后加入一行while(getchar()!='\n');清空输入缓冲区。
追问
那既然\n被当做字符处理了为什么不是把\n 继续当做字符串的一部分呢?
追答
以%s方式读取字符串时,scanf不断向后检测输入缓冲区中的字符,直到遇到空白符号(空格、制表符或回车)。此时停止读入,将空白符号之前的字符串写入第二个参数给定的内存空间中,并在末尾写入\0。空白符号仍停留在输入缓冲区中。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询