没看懂,你所谓的只能执行一次是什么现象呢,看逻辑应该与n无关啊,现在的逻辑应该是个死循环,且n永远不会++
你的while条件和if条件始终是falsewhile((c=getchar())!='!'){printf("%c",c);}