最近閒着沒事在做Hackerrank的C++題目,刷到基礎題第二題Simple Array Sum就出問題了,同樣的代碼在C++和C的環境下跑出來的結果不一樣,C++會出錯,而C不會,只知道大致哪兒出問題了但還沒有找到詳細的原因。希望各位大神批評指正。
在C++的代碼片段和最後提交結果
int simpleArraySum(vector<int> ar,int n) {
/*
* Write your code here.
*/
int sum = 0;
for(int i = 0;i < n;i++){
sum += ar[i];
}
return sum;
}
代碼提交上去之後的結果如下:
找了很多問題,但就是找不到,所以我嘗試着在Dev C++裏跑了一下,一步步調試看結果,這是Dev C++用的源代碼
#include <stdio.h>
#include <iostream>
using namespace std;
int simpleArraySum(int ar[],int n) {
int sum = 0;
for(int i = 0;i < n;i++){
sum += ar[i];
}
return sum;
}
int main(){
int n;
cin >> n;
int ar[n];
for(int i = 0; i < n; i++){
cin >> ar[i];
}
int sum1 = simpleArraySum(ar,n);
cout << "sum = " << sum1;
return 0;
}
運行結果顯示沒有錯誤,並且相關的Test case 1也是正確的
既然都是C++語言,只是環境不一樣,造成結果不一樣,說明在Hackerrank裏的運行環境(網頁上)可能會和Dev C++的不一樣,這估計得涉及到編譯器的代碼了(菜雞還沒有學計算機組成原理,等之後學完回頭看它網頁代碼怎麼搞的)。
翻看它的源代碼也只能發現網頁上的東西只涉及內容而不涉及編譯的操作,所以大致可斷定代碼的編譯過程爲:內容在網頁上編輯,然後通過submission或者run按鈕提交上去,在雲端完成測試,然後把編譯結果反饋會客戶。這就沒辦法看到底是哪兒錯了。
那隻能換種語言了,C++幾乎完全兼容C的(除了某些特殊的地方兩者有相似功能,在某乎上看到的),所以這個簡短的代碼應該沒問題。
在C下用同樣的代碼片段提交後的結果
折騰了我這麼久的基礎題終於做完給過了…大家下次注意,出錯可能是因爲它編譯環境有問題,不一定是程序的鍋,換另種語言的編譯環境試試。