getchar与回车符

· · 个人记录

getchar()非常神奇,就连回车也能读。

想要获得更好的阅读体验?

对于洛谷 P1765 手机,我们会很自然地写出如下的代码:

#include<cstdio>

int list[]={1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,4,1,2,3,1,2,3,4};

int main()
{
    char c;
    int n=0;
    while ((c=getchar())!=EOF)
    {
        if (c==' ')
            n++;
        else
            n+=list[c-'a'];
    }
    printf("%d\n",n);
    return 0;
}

然后很自然地得到了零分。

现场

下载第一组测试数据,我发现输入的末尾有回车符,这个回车符也被读了进去,导致了 WA 一片。

上网搜索得:

回车,ASCII码13

换行,ASCII码10

空格,ASCII码32

修改代码:

//洛谷P1765 手机

#include<cstdio>

int list[]={1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,4,1,2,3,1,2,3,4};

int main()
{
    char c;
    int n=0;
    while ((c=getchar())!=EOF)
    {
        if (c==13||c==10)
            break;
        if (c==' ')
            n++;
        else
            n+=list[c-'a'];
    }
    printf("%d\n",n);
    return 0;
}

AC!