getchar与回车符

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

本文同步发表于我的洛谷博客

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#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

修改代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
//洛谷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!

作者

slzwzjn

发布于

2021-03-20

更新于

2021-03-20

许可协议

评论