while(scanf("%d",&n)!=EOF)

scanf的返回值由后面的参数决定
scanf('%d%d', &a, &b);
如果a和b都被成功读入,那么scanf的返回值就是2
如果只有a被成功读入,返回值为1
如果a和b都未被成功读入,返回值为0
如果遇到错误或遇到end of file,返回值为EOF。图片说明图片说明

你的问题是什么呢?

“测试输入包含若干测试实例。当N为0时,输入结束,该实例不被处理。”

这句话 是最早我对ACM的印象 以前也没见过这种输入要求 做第一道题的时候就卡住了 上网看别人的代码 都有一句 while(scanf("%d",&n)!=EOF)

"scanf 函数还能放while里啊... EOF是什么玩意儿呢..."

上网找答案......
答案就在这里:while(scanf("%d",&n)!=EOF)
----------------------Hi,地球人,我是问答机器人小S,上面的内容就是我狂拽酷炫叼炸天的答案,除了赞同,你还有别的选择吗?

函数scanf返回正确读入的参数个数,scanf('%d%d', &a, &b);如果a,b都正确读入返回2,只有a正确读入返回1,a,b都未被成功读入则返回0(这种情况我想像不出来)。
EOF表示"End of File",一般在大多数编译器中该值被定义为-1。scanf返回EOF一般表示读取发生异常,例如读到文件末尾或者用户输入Ctrl+Z,这两种情况都会产生EOF。