簡體   English   中英

在我的數組循環中找不到正確的最大值

[英]Can't find the right max Value in my Array loop

因此,我的教授給了我們這個項目以讀取文本文件,並找到最大值,最小值,總和。 但是由於某種原因,當我編寫for循環以查找最大值時,它甚至在文本文件中都返回一個數字,而這……我不知道我做錯了什么。 我將附加我的代碼以及輸出。 謝謝

int main () {

ifstream myFile;
char myArray[210];
int i;
int maxVal;
int j;
int minValue;
double myAverage;


myFile.open("Lab #5A Data File.Txt", ios::in | ios::out);

if (myFile.is_open()) {
    cout << "The file is open." << endl; 

    myFile >> noskipws;

while (!myFile.eof()){


for (i=0; i<210; ++i) {


    myFile >> myArray[i];
    cout << myArray[i];
     } 
     myFile >>myArray[i];

    }

maxVal=myArray[0];

for (j=0; j< 210; j++)
    if (myArray[j] > maxVal){

        maxVal=myArray[j];
    }

我在運行代碼時得到了什么:

該文件已打開。

346 130 982 90 656 117 595 415 948 126 4 558 571 87 42 360 412 721 463 47 119 441 190 985 214 509 509 2 571 77 81 681 651 995 93 74 310 9 995 561 92 14 288 466 664 892 8 766 34 639 151 64 98 813 67 834 369

最大值是: 51 <---我不知道這個數字是從哪里來的...

51來自該行:

maxVal=myArray[0];

在循環中嘗試找到最大的元素:

for (j=0; j< 210; j++)
    if (myArray[j] > maxVal){
        myArray[i]=maxVal;
    }
}

但是,這會將maxVal分配給您maxValmyArray[i] 首先,您需要分配myArray[j] ,而不是myArray[i] ,其次,您需要將maxVal分配給更大的值。 因為它是maxVal=myArray[0]; 是您唯一一次為maxVal分配任何內容的maxVal ,這就是為什么它是51 (字符3的ASCII值,這是您讀取的第一個字符)。 您需要執行以下操作:

if (myArray[j] > maxVal){
     maxVal = myArray[j];
}

我相信您希望myArray成為int[] 還有一種更好的方法是不要有兩個for循環並循環直到EOF,而在myFile >> myArray[i]循環:

int myArray[210];
int i = 0;
//...
while (myFile >> myArray[i]) {          
    cout << myArray[i] << " ";  
    if (myArray[i] > maxVal) {
        maxVal = myArray[i];
    }
    i++;
}   

對於輸入文件:

346 130 982 90 656 117 595 
415 948 126 4 558 571 87 42 
360 412 721 463 47 119 441 
190 985 214 509 2 571 77 81 
681 651 995 93 74 310 9 995 
561 92 14 288 466 664 892 8 
766 34 639 151 64 98 813 67 834 369

返回:

995

為了實現您想要的,您無法進行這樣的比較

if (myArray[j] > maxVal){

因為myArray[j]是一個char(肯定不保存您感興趣的整數),而maxVal是一個int。 這也是您看到51的原因-嘗試將整數存儲到char中時,您實際上僅從流中讀取8位(這導致0到254之間的某個值,基本上是從8位塊開始的值)。您的輸入流)。

你肯定想要像

char myArray[32][210]; 

以便能夠將流中的完整整數讀取到這210個char *插槽之一中。 然后,在比較(並分配給maxValue)時,您需要將文本int值轉換為數字值,例如,使用atoi()。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM