求助……getchar()把我绕晕了……
  • 板块P1781 宇宙总统
  • 楼主_Conion
  • 当前回复11
  • 已保存回复11
  • 发布时间2021/1/31 17:44
  • 上次更新2023/11/5 04:04:30
查看原帖
求助……getchar()把我绕晕了……
265671
_Conion楼主2021/1/31 17:44

以下的这段代码在洛谷上可以AC,但在本地运行不正常。(请看注释)

#include <cstdio>
#include <string>
#include <iostream>
#include <algorithm>

bool cmp(std::string a,std::string b){
    return (a.length() != b.length()) ? (a.length() > b.length()) : (a > b);
}

int main(){
    int n;
    std::cin >> n;

    getchar();
    getchar();
    
    //为什么要加两次getchar()???
    
    std::string num[25];
    std::string ori[25];

    for (int i = 1; i <= n; i++)
    {
        getline(std::cin,ori[i]);
        num[i] = ori[i];
    }

    std::sort(num + 1, num + 1 + n, cmp);

    for (int i = 1; i <= n; i++){
        if(num[1] == ori[i]){
            std::cout << i << std::endl;
            break;
        }
    }

    std::cout << num[1] <<std::endl;

    return 0;
}

输两个getchar()后AC是我偶然试出来的。

本来只加了一个getchar()。这样丢弃一个换行符后,在我的电脑上运行良好,但在洛谷上全部WA

调了十几分钟调不出来,绝望之际开始乱打,胡乱加了两个getchar()。结果震惊地发现洛谷可以通过了,但本地却不正常了(吃掉了一个字符)。

希望有哪位大神可以告诉我原因,非常感谢!


附上我的本地环境:

系统:Manjaro 20.2.1,Linux Kernel 5.10.7

编辑器:Code OSS 1.52.1

编译器:gcc 10.2.0

调试器:gdb 10.1

编译选项:g++ ${file} -g -m64 -Wall -static-libgcc

2021/1/31 17:44
加载中...