Вывод файла C++

Это вызывает у меня злую головную боль, и я надеялся, что смогу помочь. Предполагается, что программа читает в программе 19 целых чисел, а затем выводит наименьшее (2-е целое) и наибольшее (5-е целое) на экран. Однако все мои результаты дают мусор.

#include iostream>
#include <fstream>
#include <cstdlib>

using std::ifstream;
using std::ofstream;
using std::cout;
using std::endl;

//the goal of this program is to read in numbers from a file, then output the 
//highest number and the lowest number to the screen
int main() {

ifstream fileInput;
int nOne, nTwo, nThree, nFour, nFive, nSix, nSeven, nEight, nNine, nTen,     //there are 19 numbers in the file
    nEleven, nTwelve, nThirteen, nFourteen, nFifteen, nSixteen, nSeventeen,
    nEighteen, nNineteen;


cout << "Opening File" << endl;

fileInput.open("Lab12A.txt");            //the file is opened
if (fileInput.fail())
{
    cout << "Input file opening failed. \n"; //the fail check doesnt pop up, so the file has been opened.
    exit(1);
}

fileInput >> nOne >> nTwo >> nThree >> nFour >> nFive >> nSix >> nSeven >> nEight
    >> nNine >> nTen >> nEleven >> nTwelve >> nThirteen >> nFourteen >> nFifteen   //this is where they should be extracted
    >> nSixteen >> nSeventeen >> nEighteen >> nNineteen;




cout << "The highest number is " << nTwo << endl;
cout << "The lowest number is " << nFive << endl;

fileInput.close();

system("pause");
return 0;
}

3 ответа

Я хотел добавить только комментарий, но так как я не могу этого сделать, я оставляю это как ответ.

Я скопировал ваш файл и создал текстовый файл, чтобы попытаться воспроизвести вашу проблему. Сначала все прошло хорошо (вообще никаких проблем). Но с комментарием Даниэля Шеплера я изменил кодировку файлов на UTF8-BOM (это можно легко сделать из меню Кодировка Notepad++) и попробовал снова. Я получил те же значения, которые вы опубликовали. Я не могу дать больше объяснений, как именно следует толковать ценности, но я хочу, чтобы кто-то с большим опытом просветил нас здесь.

Во-первых, я хотел бы поблагодарить всех, кто смотрел и комментировал это, я очень ценю это, проблема была в конечном итоге связана с необходимостью полного пути к файлу.txt, а не относительного пути, который я первоначально разместил. По какой-то причине мой компилятор не смог распознать файл без него. Похоже, глупая ошибка, но я относительно новичок в этом, так что они наверняка пискнут. Еще раз спасибо всем!

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

#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>


int main(){

    std::ifstream in("test.txt");

    std::vector<int> vecInt;
    int value;

    while(in >> value)
        vecInt.push_back(value);
    in.close();

    std::sort(vecInt.begin(), vecInt.end());

    // second value is at index 1 and fifth value is at index 4
    for(auto i(0); i != vecInt.size(); ++i)
        if(i == 1 || i == 4)
            std::cout << vecInt[i] << std::endl;


    std::cout << std::endl << std::endl;
    return 0;
}
  • Я не уверен, что вы имеете в виду под "наибольшим пятым целым числом".
Другие вопросы по тегам