下面的代码在HackerRank上工作正常,但在Xcode 11上却不能正常工作。我怀疑while循环引起了问题。有什么我想念的吗?
这不是第一次在HackerRank上运行代码,但不是Xcode。我通常在提交Xcode之前先研究Xcode。我想确保我在Xcode上编写的代码可以在任何编译器上使用。 我将不胜感激。
int main(){
int n, i=0;
cin >> n;
int * A = new int[n];
while(cin >> A[i++]);
while(cout << A[--n] << ':' && n);
delete[]A;
return 0;
}
问题是: 用户将需要输入数组的大小,并且同一行中的数组元素之间用空格隔开。程序将以相反的顺序返回数组。
样本输入:4(输入)
样本输入:1 2 3 4(输入)
样本输出:4 3 2 1
当我尝试在Xcode上运行时,在手动输入值之后似乎永远循环。光标只是闪烁。我必须强行辞职。我没有任何错误。请参阅下面链接中的图像。 Xcode debug area image
答案 0 :(得分:0)
while(cin >> A[i++]);
将永远等待下一个输入值,直到遇到输入结尾或无效的输入值为止。
这将适用于hackerrank,因为它们将使用输入值传递到文件中,因此当您尝试读取太多值时,cin将报告eof
。
正如您确切知道的那样,您期望最简单(也是最安全的方法来防止越界访问数组)的解决方案是添加s检查您已阅读了多少输入:
while(i < n && cin >> A[i++]);