Problem Description
马上就要考试了,小银变的非常的紧张(平时不好好的听课),昨天小银得到了一个成绩单,但是小银在打印的时候将名单上人的顺序倒置了,所以小银想知道真正的顺序。
成绩单的每一行包括:姓名 城市 成绩。姓名和城市保证全是小写字母(不超过15个字符),成绩不大于100.
Input
多组输入,每组的第一行输入一个n(1 <= n <= 1000).表示名单上人的数量,接下来n行每行包括人的姓名 城市 成绩。
Output
输出名单的真正的顺序。
Example Input
3
xiaotong ningbo 100
xiaoyin zhejiang 100
xiaojin jiangxi 100
Example Output
xiaojin jiangxi 100
xiaoyin zhejiang 100
xiaotong ningbo 100
Hint
Author
绝尘
#include <stdio.h>
struct node
{
char na[16];
char ho[16];
int sc;
}st[1000];
int main()
{
int n,i;
while(~scanf("%d",&n))
{
for(i=0;i<n;i++)
{
scanf("%s %s %d",st[i].na,st[i].ho,&st[i].sc);
}
for(i=n-1;i>=0;i--)
{
printf("%s %s %d
",st[i].na,st[i].ho,st[i].sc);
}
}
return 0;
}
注意
while(~scanf()):
可以经常在ACM代码中看到 while(~scanf("%d",&n)){ } 这样的代码,意思是在读到输入结尾时循环也结束。
一般在读到输入流结尾时,scanf返回的是EOF。
EOF是在头文件stdio.h中定义的常量,一般为-1。
-1 的原码是10000001,反码是1111110,补码是11111111。复习一下,正数的原码、反码、补码都是一样的;负数的原码是符号位为1,反码是(对原码)符号位不变、其余位取反,补码是(对原码)符号位不变、其余位取反、末位加1.
~EOF则是对EOF进行按位取反操作,则为00000000。所以while条件不满足,循环结束。
资料来源
关于while循环中的~scanf()