ACM的输入问题
while(~scanf("%d",&n))和while(scanf("%d",&n))有什么区别,为什么用后者超时的时候换成前者就能AC了...
while(~scanf("%d",&n))和while(scanf("%d",&n))
有什么区别,为什么用后者超时的时候换成前者就能AC了 展开
有什么区别,为什么用后者超时的时候换成前者就能AC了 展开
3个回答
展开全部
你没明白为何要写这样的while循环! 一般acm的题目都是有多组测试数据,然后一般每组都是先输入一些数据然后要你输出结果所以一般会出现如上的while循环结构! 这样写是利用了scanf 函数的返回值!即你读取了多少个数据就会返回几!所以当输入测试数据结束时scanf返回值就会返回特定的值,因为一般测试数据时保存在文件中的,所以一般到最后返回的是EOF,然后就是楼上说的那样了!
还有个人建议写成如下形式:
while(scanf("%d", &n) == 1) 一般写成这样的形式比较好点.
还有个人建议写成如下形式:
while(scanf("%d", &n) == 1) 一般写成这样的形式比较好点.
追问
我问的是为什么多个~就能避免超时了,你有回答重点么?
追答
虽然没有直接说出但是间接的告诉你了!你要是还是不能理解那就是你的问题了!不要用你自己的愚蠢来质问我!
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
scanf()读到输入的结尾时返回值是EOF
一般EOF的值是-1,而不是0
~是按位取反,~(-1)=0
一般EOF的值是-1,而不是0
~是按位取反,~(-1)=0
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询