#include <iostream>
#include <cstring>
using namespace std;
int hang[10] = {0,1,1,1,2,2,2,3,3,3},
lie[10] = {0,4,5,6,4,5,6,4,5,6},
djx1[10] = {0,7,0,0,0,7,0,0,0,7},
djx2[10] = {0,0,0,8,0,8,0,8,0,0};
int x[2][9];
string s;
int main() {
getline(cin, s);
int len = s.size();
for (int i = 0; i < len; i++) {
x[i%2][hang[s[i]-'0']]++;
x[i%2][lie[s[i]-'0']]++;
x[i%2][djx1[s[i]-'0']]++;
x[i%2][djx2[s[i]-'0']]++;
}
for (int i = 1; i <= 8; i++) {
if (x[0][i] == 3) {
printf("xiaoa wins.\n");
return 0;
}
else if (x[1][i] == 3) {
printf("uim wins.\n");
return 0;
}
}
printf("drew.\n");
return 0;
}
正确代码(AC):
#include <iostream>
#include <cstring>
using namespace std;
int hang[10] = {0,1,1,1,2,2,2,3,3,3},
lie[10] = {0,4,5,6,4,5,6,4,5,6},
djx1[10] = {0,7,0,0,0,7,0,0,0,7},
djx2[10] = {0,0,0,8,0,8,0,8,0,0};
int x[2][9];
string s;
int main() {
cin >> s;
int len = s.size();
for (int i = 0; i < len; i++) {
x[i%2][hang[s[i]-'0']]++;
x[i%2][lie[s[i]-'0']]++;
x[i%2][djx1[s[i]-'0']]++;
x[i%2][djx2[s[i]-'0']]++;
}
for (int i = 1; i <= 8; i++) {
if (x[0][i] == 3) {
printf("xiaoa wins.\n");
return 0;
}
else if (x[1][i] == 3) {
printf("uim wins.\n");
return 0;
}
}
printf("drew.\n");
return 0;
}
两份代码之间只是输入方式不同,前者使用 getline(cin,s),后者使用 cin >> s,而结果天差地别。
请问这是为什么?getline是有什么机制吗?