ACM的输入问题

2024-11-15 16:43:15
推荐回答(3个)
回答(1):

一般来说,OJ在测试的时候会将一个文本文件重定向到标准输入(stdin),这样,在输入文件结束时,scanf()会返回一个文件结束符EOF,这个结束符的值是-1。
了解机内码表示法的话,应该知道,-1在内存中的二进制值的各个位上全为1,按位取反后刚好为0。
所以,前一种写法,当且仅当输入结束时结束循环,而后一种写法在遇到文件结束符时无法退出循环。

回答(2):

你没明白为何要写这样的while循环! 一般acm的题目都是有多组测试数据,然后一般每组都是先输入一些数据然后要你输出结果所以一般会出现如上的while循环结构! 这样写是利用了scanf 函数的返回值!即你读取了多少个数据就会返回几!所以当输入测试数据结束时scanf返回值就会返回特定的值,因为一般测试数据时保存在文件中的,所以一般到最后返回的是EOF,然后就是楼上说的那样了!
还有个人建议写成如下形式:

while(scanf("%d", &n) == 1) 一般写成这样的形式比较好点.

回答(3):

scanf()读到输入的结尾时返回值是EOF
一般EOF的值是-1,而不是0
~是按位取反,~(-1)=0