大疆笔试编程题是不是有问题呀!?
做的是 IBG移动端/前端/后端开发工程师A卷
虽然用的是 ACM 模式,但他给我们写好了输入输出,只用我们写核心函数就好了。
但是第一题他给的输入输出代码好像是有问题的????
我用的是 C++ 语言。第一题的输入大概是这样的:
2 // 一个数表示后面有几行 s1 // 字符串 s2 // 字符串
题目不难,写好之后一直不通过,就调试了一下,发现他的输入输出写错了?他给出的输入输出是这样的:
int main() { int res; int timePoints_size = 0; cin >> timePoints_size; vector<string> timePoints; string timePoints_item; for(int timePoints_i=0; timePoints_i<timePoints_size; timePoints_i++) { getline(cin, timePoints_item); // 这里有问题 timePoints.push_back(timePoints_item); } Solution *s = new Solution(); res = s->findMinDifference(timePoints); cout << res << endl; return 0; }
刚刚上网查了一下,这篇文章有讲到这个问题:[利用getline函数输入字符串数组(注意点)](https://blog.csdn.net/weixin_44915226/article/details/109007465)
大概就是说:在 `cin >> n;` 的时候,将输入的 2 赋给了 n,但是,换行符还在输入流中,所以在下面第一次使用 getline 的时候,其实是将换行符输入给了变量,这样就导致最后一个字符串没有被输入进去。解决方法是在 `cin >> n;` 后面加一个 `cin.ignore()` 或 `cin.get()`。
我当时的方法是将 `getline(cin, timePoints_item);` 改成了 `cin >> timePoints_item;`。这样也能通过。
当时反馈的时候,他还说我不懂??
因为这个耗费了好多时间,后面那题都没做。这也太坑了!~
问了一下,好像 Java 的输入输没有问题。