[英]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
分配給您maxVal
的myArray[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.