首页 > 解决方案 > 为什么有些代码可以工作 HackerRank 而不是 Xcode

问题描述

下面的代码在 HackerRank 上运行良好,但在 Xcode 11 上却不行。我怀疑是 while 循环导致了这个问题。有什么我想念的吗?

这不是代码第一次在 HackerRank 上运行,但不是 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 调试区图片

标签: c++xcodewhile-loop

解决方案


while(cin >> A[i++]);

将永远等待下一个输入值,直到遇到输入结束或无效输入值。

这将适用于hackerrank,因为它们将在带有输入值的文件中进行管道传输,因此eof当您尝试读取太多值时 cin 会报告。

正如您确切知道您期望有多少输入一样,最简单(也是最安全的防止数组越界访问)的解决方案是添加 s 检查您已读取的输入数量:

while(i < n && cin >> A[i++]);

推荐阅读