估计你是没有理解其中的原理:
(1)键盘缓冲区 和 输入流数据缓冲区
当我们在键盘上敲键时,敲入的一个个键值都暂存在键盘缓冲区里,只有遇到回车键(回车键也是字符,\n )时,敲入的键值才从键盘缓冲区送入到输入流数据缓冲区。
(2)getchar() 是到输入流数据缓冲区去读取一个字符,当输入流数据缓冲区没有数据时,读语句就等待,当输入流数据缓冲区有数据时,就读最先进来的那个字符。读一个,就从输入流数据缓冲区里清除掉这个字符。getchar() != '\n' 是进一步判断刚读入的这个字符是不是回车键。
(3)while (getchar() != '\n' ) continue;与 while (getchar() != '\n' ) 空语句 ; 作用相同,就是 循环着到输入流数据缓冲区去读取一个一个字符,只要读到的不是 '\n', 就继续读 (读一个清除一个),直到读到 '\n'。其作用等价于 “清除输入流数据缓冲区”。
(4)输入流数据缓冲区被清除后,程序再次等待键盘缓冲区把东西送过来。而键盘缓冲区等待用户敲入字符,此时若键盘缓冲区送过来的 '\n' ,则结束这个 while 循环。
而 *(p + i) = getchar() 将 getchar() 读取键盘输入的值赋给 (p + i) 这个数组单元,然后再判断 (p + i) 这个单元的值 *(p + i) 是否是 '\n',如果不是回车键,则循环继续,如果是回车键,则结束循环。
以上就是为什么你调试程序时正常,正式运行时,在输入完字符后敲回车键确认(注意,此时敲的回车键只是确认输入)后,还需敲一次回车键的原因。
程序的修改,楼上的两位已经说的很清楚了,我就不重复了。