Yahoo奇摩知識+ 將於 2021 年 5 月 4 日 (美國東部時間) 終止服務。自 2021 年 4 月 20 日 (美國東部時間) 起,Yahoo奇摩知識+ 網站將會轉為唯讀模式。其他 Yahoo奇摩產品與服務或您的 Yahoo奇摩帳號都不會受影響。如需關於 Yahoo奇摩知識+ 停止服務以及下載您個人資料的資訊,請參閱說明網頁。

A 發問時間: 電腦與網際網路程式設計 · 1 0 年前

C++程式修正(vector用來取代陣列 應用)

指定條件:

必須由main()呼叫三個函數

由 輸入函數indata() 讀入若干筆成績, 以-1為停止信號

(利用不定迴圈while)

以下是我寫的程式碼, 不知犯了什麼錯誤

編譯器未顯示錯誤, 但執行時卻只出現"Aborted"的字樣而未能順利執行程式

懇請高手為我修正, 非常感謝!!

#include<iostream>

#include<vector>

using namespace std;

int indata(vector<int> grade);

void cal(vector<int> grade, int size, float & sum, int & low);

void outdata(vector<int> grade, int size, float sum, int low);

int main()

{

vector<int> grade;

float sum0;

int size0, low0;

indata(grade);

cal(grade, size0, sum0, low0);

outdata(grade, size0, sum0, low0);

return 0;

}

int indata(vector<int> grade)

{

int size;

grade.resize(size);

cout<<"請輸入數個成績(輸入-1時停止)"<<endl;

int i=0;

while(grade[i] != -1){

cin>>grade[i];

i++;}

size=grade.size();

}

void cal(vector<int> grade, int size, float & sum, int & low)

{

int a=0;

for(int i=0; i<size; i++){

a+= grade[i];}

sum=a/size;

low=grade[0];

for(int i=1; i<size; i++){

if(low>grade[i]){

low=grade[i];}

}

}

void outdata(vector<int> grade, int size, float sum, int low)

{

for(int i=0; i<size; i++){

cout<<"成績"<<i+1<<" "<<grade[i]<<"分"<<endl;}

cout<<"平均"<<sum<<"分"<<endl;

cout<<"最低分"<<low<<"分"<<endl;

}

已更新項目:

感謝您的熱心回答!!

以下針對您的回答再次提問

(2)補上int size=5之後, 程式已能執行,

然而就如您在(3)說的, 跳不出while loop

參考了您修改的程式, 跳出的指令似乎是 break指令

那麼, 有沒有可能不用break指令而能跳出while loop呢?

另外, const最大值的宣告是必要的嗎?

low和avg變數的宣告 有沒有可能放在main中,

使用參數傳遞的方式傳給cal和outdata函數呢?

試了很多次還是未能寫出正確的程式

不好意思麻煩您了!!

2 個解答

評分
  • 1 0 年前
    最佳解答

    我大概看了一下,似乎每一個function都有錯誤,我先說indata的錯誤,等你修了之後,再看看其他的吧(在你修正的時候,或許會同時發現其他function的錯誤吧)

    (1) int indata(vector<int> grade) ==> 這個function必須有一個type為int的value回傳值到main,但在你的indata裡少了return value

    (2) grade.resize(size) ==> size應該是要一個constant而非variable,你可以試試看令int size=5,就會知道我的意思了

    (3) while(grade[i] != -1){cin>>grade[i];i++;}

    你這樣寫,永遠都出不去while loop,例如當輸入grade[1]=-1,下一行i=i+1=2,所以while的判別是判斷grade[2]是否為-1

    提醒一下,在main裡,cal(grade, size0, sum0, low0); ==> size0, sum0, low0是否要給初始值?

    2010-06-06 01:04:32 補充:

    我修改你的程式,因為補充有字數限制,我放在http://tw.myblog.yahoo.com/life.higher/article?mid...

    2010-06-06 23:06:27 補充:

    (1)有沒有可能不用break指令而能跳出while loop呢? ==>yes

    (2) const最大值的宣告是必要的嗎? ==>我個人認為應該要宣告vector的size,否則system如何知道要保留多少記憶體給這個vector呢?如果有錯,請其他高手指正吧!

    (3)low和avg變數的宣告 有沒有可能放在main中,使用參數傳遞的方式傳給cal和outdata函數呢?==> yes

    我有修改我的code,你參考吧!

    參考資料: Me
  • 1 0 年前

    打開編輯器所有的 Warning 是學程式很基本的觀念!

    回答者指出的前二個錯誤,compiler 都會指出 Warning!

還有問題?馬上發問,尋求解答。