• SDUT 名单真相


    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()

  • 相关阅读:
    Logwatch的配置与使用
    Redirect HTTP to HTTPS on Tomcat
    RedHat7搭建yum源服务器
    卸载RedHat7自带的yum,安装并使用网易163源
    15个Linux Yum命令实例--安装/卸载/更新
    GitHub详细教程
    RedHat7 Git 安装使用
    RedHat7 SELinux
    RedHat7配置IdM server
    IIS Shared Configuration
  • 原文地址:https://www.cnblogs.com/lushans/p/6626096.html
Copyright © 2020-2023  润新知