社区讨论

珍爱生命,慎用 getchar()

P1518[USACO2.4] 两只塔姆沃斯牛 The Tamworth Two参与者 8已保存回复 9

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
9 条
当前快照
1 份
快照标识符
@mlgy29jd
此快照首次捕获于
2026/02/11 02:38
上周
此快照最后确认于
2026/02/12 18:35
7 天前
查看原帖
本题思路并不复杂,模拟农夫与牛的行动,如果出现循环的情况判定为永远无法相遇即可。
然而,很悲剧的是,我在大半夜自己给自己找了麻烦。
起先是我考虑到该题中会存储一个由字符构成的 10 * 10 的图进入一个二维数组,那么就需要将每一个字符分开储存。睿智的我马上决定使用 getchar() 来接收输入,代码如下(此处仅列出接收输入部分的代码):
CPP
for (int i = 0; i < 10; i++) {
    for (int j = 0; j < 10; j++) {
        graph[i][j] = getchar();
        if (graph[i][j] == 'F') {
            f_x = f_x0 = i;
            f_y = f_y0 = j;
            graph[i][j] = '.';
        }
        if (graph[i][j] == 'C') {
            c_x = c_x0 = i;
            c_y = c_y0 = j;
            graph[i][j] = '.';
        }
    }
    getchar()
}
xibao.png
问题出在 UNIX 和 Windows 处理控制台换行的不同方式上。
在 UNIX 中,换行是 \n ,而在 Windows 中,换行是 \r\n 。这导致了上述程序的失败。
可怜我还在本地改来改去,浪费了我 2 个小时的青春。
除非你很清楚 getchar 正在做什么,否则该用 cin 就老老实实用 cin

回复

9 条回复,欢迎继续交流。

正在加载回复...