以下的这段代码在洛谷上可以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