Не могу найти правильное максимальное значение в цикле Array - PullRequest
0 голосов
/ 01 декабря 2018

Итак, мой профессор дал нам этот проект, чтобы прочитать текстовый файл и найти максимальное значение, минимальное значение, сумму.Но по какой-то причине, когда я пишу цикл 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 57187 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

Максимальное значение: 51 <--- Я понятия не имею, откуда пришло это число ... </p>

Ответы [ 2 ]

0 голосов
/ 01 декабря 2018

Чтобы достичь того, что вы хотите, вы не можете сделать подобное сравнение

if (myArray[j] > maxVal){

, потому что myArray[j] - это символ (определенно не содержащий целые числа, которые вас интересуют), а maxVal - это int.Это также причина, по которой вы видите 51 - когда вы пытаетесь сохранить целое число в вашем символе, вы, по сути, читаете только 8 бит из потока (что приводит к некоторому значению в диапазоне от 0 до 254, которое в основном является просто некоторым 8-битным блоком изваш входной поток).

Вы определенно хотите, чтобы что-то вроде

char myArray[32][210]; 

могло считывать ваши полные целые числа из потока в один из этих 210 слотов char *.Затем при сравнении (и присвоении maxValue) вам необходимо преобразовать текстовое значение int в числовое значение, например, используя atoi ().

0 голосов
/ 01 декабря 2018

51 исходит из строки:

maxVal=myArray[0];

В вашем цикле, чтобы попытаться найти самый большой элемент, который у вас есть:

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

Однако это назначит maxVal до myArray[i] что не то, что вы хотите.Во-первых, вам нужно присвоить myArray[j], а не myArray[i], а во-вторых, вам нужно присвоить maxVal большему значению.Поскольку maxVal=myArray[0]; - это единственный раз, когда вы присваиваете что-либо maxVal, поэтому это 51 (значение ASCII символа 3, которое является первым прочитанным символом).Вам нужно сделать что-то вроде:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...